0

每当我们安装软件时,Windows 操作系统都会在 C:\Windows\Installer\ 位置保留安装程序 *.msi 的备份副本。

所以我正在遍历“C:\Windows\Installer\”中存在的所有 msi 文件

我想准备一个映射列表,其中列表将包含 *.msi 文件及其默认位置。

假设 C:\Windows\Installer[some product key]\123xR23.msi 考虑“123xR23.msi”是 WinZip 安装的备份文件。并且安装程序已将 WinZip 安装在位置“C:\Program Files(x86)\WinZip”

因此列表将包含以下条目“123xR23.msi”、“C:\Program Files(x86)\WinZip”

请帮我。

谢谢

4

1 回答 1

0

首先,你为什么需要这个?

在 HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\\Products\\InstallerProperties 的注册表中已经存在这些 *.msi 文件的映射,然后 msi 的值在 LocalPackage 下

S-1-5-18 是本地系统的安全 ID。

ProductGUID 在这里也有点奇怪。在您的安装程序中,您会看到类似

2F7DBBE6-8EBC-495C-9041-46A772F4E311

但注册表路径中的产品 G​​UID 将如下所示

6EBBD7F2CBE8C5940914647A274F3E11

这肯定是有原因的,但我不知道它是什么。在注册表中查看时,您只需要将您的产品 guid 转换为其他表示形式。

还有一个名为 InstallLocation 的注册表项,其中应包含 msi 包的安装位置。不过,这并不总是填写。也许安装目录存储在注册表中的其他位置,我不知道您可能需要四处看看。


编辑:看起来安装的每个组件都在注册表中通过 GUID 获得一个条目,其中包含它安装到的路径。如果上面提到的 InstallLocation 下未列出特定 MSI,这可以帮助您找到它的安装位置。根据 Micheal 的评论,我建议利用 Msi 相关功能(https://msdn.microsoft.com/en-us/library/windows/desktop/aa372420(v=vs.85).aspx

于 2016-04-26T14:46:52.900 回答