我有一个Interop Excel应用程序,通过Window Installer安装,它只包含.dll而不是可执行文件.exe。添加/删除程序和wmic product get name
列表都可以看到它,但不能通过命令行where
看到它(参考here)
我正在编写批处理文件以在安装后修改一些文件。如何在批处理文件中获取该程序的安装路径?
我还应该提一下,虽然添加/删除程序可以看到该程序,但
中并不存在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
答案 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之外复制的一组覆盖值。