【问题标题】:Is there an environmental variable or equivalent for WinZip?WinZip 是否有环境变量或等效变量?
【发布时间】:2011-03-19 04:44:51
【问题描述】:

我可以使用 WinZip32.exe 的环境变量或等效变量来查找它的位置路径吗?

EDIT - 这是用于受控系统的内部工具。

谢谢。

【问题讨论】:

    标签: c++ windows winapi windows-xp environment-variables


    【解决方案1】:

    您可以访问注册表并使用查找 .zip 文件的关联程序。无论如何,这会更好,因为不是每个人都使用 WinZip。

    【讨论】:

    • 除了可能不支持使用该程序(即不同的命令行参数);)
    • ...或者您可以使用FindExecutable 来查找它,而不是深入了解注册表的(大部分未记录的)部分。
    • @Jerry Coffin:FindExecutable 很快吗?
    • @Tommy:说实话,我从来没有尝试过计时。当我使用它时,大多数情况下(几乎)会立即生成相关的可执行文件,该可执行文件通常在 100 ms 范围内,因此 FindExecutable 的贡献并不大。
    • @TomTom:您可以查找该类型的关联操作,其中将包括适当的命令行语法。
    【解决方案2】:

    安装程序通常将有用的信息存储在HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall 下,但实际密钥并不总是很容易找到,并且存储的信息因安装程序而异。

    看起来 WinZip(至少 14.5)正在使用基于 MSI 的安装程序,因此您需要找到它的密钥(在我的情况下为 {CD95F661-A5C4-44F5-A6AA-ECDD91C240BD})然后读取 InstallLocation 密钥(完整路径HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{CD95F661-A5C4-44F5-A6AA-ECDD91C240BD}\InstallLocation)。

    附:如果 WinZip 太麻烦,您可以随时选择提供命令行版本的众多免费替代方案之一,例如 7-Zip,您可以在已知位置安装/复制。

    【讨论】:

      【解决方案3】:

      是否有 WinZip32.exe 的环境变量或等效项可用于查找其位置路径?

      可能可以从注册表中提取程序位置。大多数程序将其设置存储在 HKEY_LOCAL_MACHIN/Software/VendorName/ProgramName 或 HKEY_CURRENT_USER/Software/VendorName/ProgramName 中。其中 VendorName 是公司名称,ProgramName 是程序名称。这些设置可能包括安装路径。而且,当然,在 HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall 中的某处有卸载信息但是,依赖它们中的任何一个都不是一个好主意 - 设置格式可能会在下一个版本中改变,并且一些用户(比如我)即使他们仍然拥有该程序,也倾向于从注册表中删除额外的值。因此,如果设置了这些值,您无法保证该程序存在,并且如果缺少这些值,您也无法保证该程序不存在。

      正确的解决方案取决于您要使用 winzip 做什么。

      如果你想用你的程序解压 *.zip 文件,你有两个选择:

      1. 使用某种处理 zip 文件的库。
      2. 在您的程序中包含紧凑的 *.zip-comptaible 存档器(可能是命令行)。

      如果您想为用户打开 winzip 中的文件,那么正确的方法是打开用户系统上与 *.zip 相关的任何程序,而不是强制用户使用 winzip。我相信使用程序打开文件(当前与该文件类型相关联)可以通过ShellExecute

      【讨论】:

        猜你喜欢
        • 2015-06-24
        • 2016-07-01
        • 2020-08-15
        • 1970-01-01
        • 2020-04-04
        • 1970-01-01
        • 2014-05-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多