查找/预测* .msi文件安装位置读取* .msi数据库

时间:2016-04-26 12:19:16

标签: c# wix orca

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

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

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

假设C:\ Windows \ Installer [某个产品密钥] \ 123xR23.msi 考虑“123xR23.msi”是WinZip安装的备份文件。安装程序已在“C:\ Program Files(x86)\ WinZip”

位置安装WinZip

所以列表将有以下条目 “123xR23.msi”,“C:\ Program Files(x86)\ WinZip”

请帮帮我。

由于

1 个答案:

答案 0 :(得分:0)

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

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

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

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

的内容
2F7DBBE6-8EBC-495C-9041-46A772F4E311

但注册表路径中的产品GUID将如下所示

6EBBD7F2CBE8C5940914647A274F3E11

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

还有一个名为InstallLocation的注册表项,它应包含msi包的安装位置。但这并不总是填补。也许安装目录存储在注册表中的其他地方我不知道你可能需要环顾四周。

<小时/>

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