我有一个Interop Excel应用程序,通过Window安装,它只包含.dlls,不包含可执行文件/.exe。"Add/Remove program“和wmic product get name列表都可以看到该漏洞,但where命令(指的是here)看不到该漏洞。
我正在写一个批处理文件,以便在安装后修改一些文件。如何在我的批处理文件中获取该程序的安装路径?
我还应该提到的是,尽管“添加/删除程序”可以看到程序,但它并不存在于
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall发布于 2015-11-20 04:50:14
我猜你无法找到,因为安装路径不会自动记录在卸载注册表信息中,除非你的设置设置了ARPINSTALLLOCATION属性:
https://msdn.microsoft.com/en-us/library/aa367589(v=vs.85).aspx
或者您显式创建了一个注册表项,并将其值设置为TARGETDIR,如果您希望将该位置保存在您控制下的某个位置,则可以在将来执行此操作。
因此,Chris的答案可能是查找路径的正确方法,并且告诉您不要替换文件也是正确的。Installer resilience (或从Add/Remove Programs (添加/删除程序)或右键单击MSI文件进行修复)可能会恢复它们,需要原始MSI。MSI知道已安装内容的文件版本。此外,升级或修补程序可能还需要原始MSI。注意占用者。
发布于 2015-11-19 19:27:31
使用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发布于 2015-11-19 23:48:24
MSI的WMI提供程序一直存在错误。我会使用原生MSI API来询问组件的安装位置。(MsiGetComponentPathEx function
但我必须建议,MSI喜欢“拥有”它的文件。如果有人做了修复,你的修改很可能会成为历史。我建议将MSI转换为包含修改后的文件,并跳过安装后修改步骤。或者重新设计您的外接程序,以便您可以有一个由MSI安装的基本值集和一个MSI不知道的MSI外部复制的重写值集。
https://stackoverflow.com/questions/33801662
复制相似问题