2

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

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

我还应该提到,虽然“添加/删除程序”看到了该程序,但它并不存在于

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
4

3 回答 3

4

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

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

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

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

于 2015-11-19T20:50:13.557 回答
2

使用 WMICwhere指定要查找的名称并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-19T11:27:31.223 回答
1

MSI 的 WMI 提供程序一直存在问题。我会使用本机 MSI API 来询问组件的安装位置。(MsiGetComponentPathEx 函数

但我不得不建议 MSI 喜欢“拥有”它的文件。如果有人进行维修,您的修改很可能会成为历史。我建议转换 MSI 以包含修改后的文件并跳过安装后修改步骤。或者重新设计您的插件,以便您可以拥有一组由 MSI 安装的基本值,以及在 MSI 之外复制但 MSI 不知道的一组覆盖值。

于 2015-11-19T15:48:23.540 回答