获取窗口安装程序安装的程序的安装路径,但命令行“where”看不到

时间:2015-11-19 10:45:41

标签: batch-file command-line windows-installer wmic installation-path

我有一个Interop Excel应用程序,通过Window Installer安装,它只包含.dll而不是可执行文件.exe。添加/删除程序和wmic product get name列表都可以看到它,但不能通过命令行where看到它(参考here

我正在编写批处理文件以在安装后修改一些文件。如何在批处理文件中获取该程序的安装路径?

我还应该提一下,虽然添加/删除程序可以看到该程序,但

中并不存在
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall

3 个答案:

答案 0 :(得分:4)

我的猜测是您无法找到,因为安装路径不会自动记录在卸载注册表信息中,除非您的设置设置了ARPINSTALLLOCATION属性:

https://msdn.microsoft.com/en-us/library/aa367589(v=vs.85).aspx

或者您明确创建了一个注册表项并将其值设置为[TARGETDIR],如果您希望将该位置保存在您控制的某个位置,这就是您将来可以执行的操作。

所以克里斯的答案很可能是找到路径的正确方法,并且还告诉你不要替换文件。安装程序弹性(或从“添加/删除程序”修复或右键单击MSI文件修复)可能会恢复它们,需要原始MSI。 MSI知道安装内容的文件版本。此外,升级或补丁可能还需要原始MSI。买者自负。

答案 1 :(得分:2)

使用WMIC的where指定要查找的名称,并get InstallLocation显示路径:

for /f "delims=" %%a in ('
    wmic product where "Name='Exact name of your app'" get InstallLocation ^| find "\"
') do set location=%%a

答案 2 :(得分:1)

MSI的WMI提供商一直都是错误的。我将使用本机MSI API来询问组件的安装位置。 (MsiGetComponentPathEx function

但我必须建议MSI喜欢“拥有”它的文件。如果有人进行修复,那么您的修改很可能是历史记录。我建议转换MSI以包含修改后的文件并跳过安装后修改步骤。要么是重新设计你的插件,要么你可以拥有MSI安装的一组基本值,以及在MSI不知道的MSI之外复制的一组覆盖值。