我一直在为这个问题伤脑筋,也在 Google 上寻找答案,但没有发现任何有趣的东西——我确信这可能是我的搜索词的问题,但我希望有人知道为什么我会看到这种行为。
我正在寻找将 msi 安装链接到其对应的 \Windows\Installer\msi_munged_file_name.msi。我使用 /l*vx 日志记录来获取 MSI 安装日志,我看到如下条目:
PROPERTY CHANGE: Adding DATABASE property. Its value is 'C:\Windows\Installer\1f219540.msi'.
我看到文件系统确实创建了该文件。但是,在 MSI 完成后,该文件被重命名。o_O
我已经进行了 2 次迭代,并且两次文件都已重命名为 +3 hex 之前的名称,我想。因此,在这种情况下,我最终得到一个名为的文件:
C:\Windows\Installer\1f219543.msi
我很好奇为什么会发生重命名,以及算法是否确实要将文件名的最后一个字符 +0x3,或者这是否只是我迄今为止两次运行中的巧合。
我已经使用 Orca.exe 来验证 C:\Windows\Installer 中的文件确实是我的 msi。
这是我对 Windows Installer 进行的研究,我试图更好地了解 MSI/Windows Installer 平台。
提前致谢!
答案1
我找到了一种方法来获取我需要的东西。看来在安装过程中,Windows Installer 会对产品代码执行“转换” - 我发现这被称为“打包的 GUID” - 这是一种奇怪的(对我来说)产品代码 GUID 逆转。有很多关于此的参考资料。
因此,我编写了代码来获取产品代码 GUID,然后“打包”以获取密钥:
@"HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products\" +
packedGuid +
@"\InstallProperties");
然后,您可以读取 LocalPackage 的值并获取本地缓存的 MSI 文件的完整路径。
通过这次练习,我学到了很多有关 Windows Installer 的知识。
答案2
假设您正在使用 signtool,则必须包含选项标志/d MyProduct.msi