【发布时间】:2011-03-19 04:44:51
【问题描述】:
我可以使用 WinZip32.exe 的环境变量或等效变量来查找它的位置路径吗?
EDIT - 这是用于受控系统的内部工具。
谢谢。
【问题讨论】:
标签: c++ windows winapi windows-xp environment-variables
我可以使用 WinZip32.exe 的环境变量或等效变量来查找它的位置路径吗?
EDIT - 这是用于受控系统的内部工具。
谢谢。
【问题讨论】:
标签: c++ windows winapi windows-xp environment-variables
您可以访问注册表并使用查找 .zip 文件的关联程序。无论如何,这会更好,因为不是每个人都使用 WinZip。
【讨论】:
FindExecutable 来查找它,而不是深入了解注册表的(大部分未记录的)部分。
安装程序通常将有用的信息存储在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,您可以在已知位置安装/复制。
【讨论】:
是否有 WinZip32.exe 的环境变量或等效项可用于查找其位置路径?
你可能可以从注册表中提取程序位置。大多数程序将其设置存储在 HKEY_LOCAL_MACHIN/Software/VendorName/ProgramName 或 HKEY_CURRENT_USER/Software/VendorName/ProgramName 中。其中 VendorName 是公司名称,ProgramName 是程序名称。这些设置可能包括安装路径。而且,当然,在 HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall 中的某处有卸载信息但是,依赖它们中的任何一个都不是一个好主意 - 设置格式可能会在下一个版本中改变,并且一些用户(比如我)即使他们仍然拥有该程序,也倾向于从注册表中删除额外的值。因此,如果设置了这些值,您无法保证该程序存在,并且如果缺少这些值,您也无法保证该程序不存在。
正确的解决方案取决于您要使用 winzip 做什么。
如果你想用你的程序解压 *.zip 文件,你有两个选择:
如果您想为用户打开 winzip 中的文件,那么正确的方法是打开用户系统上与 *.zip 相关的任何程序,而不是强制用户使用 winzip。我相信使用程序打开文件(当前与该文件类型相关联)可以通过ShellExecute
【讨论】: