我需要使用产品代码GUID查找已安装应用程序的产品版本。有没有办法使用某种简单的API调用来做到这一点?我已经找到了使用P / Invoke和WindowsInstaller命名空间的方法,但我试图避免使用P / Invoke。
答案 0 :(得分:1)
Windows Installer会像您发现的那样公开Win32 API函数(P / Invoke)。它还具有包装这些API的COM自动化接口,但我相信你可以猜到它更不优雅。 Windows Installer XML(WiX)部署工具基础(DTF)有一个MSI互操作库,它将其包装为托管代码,但我相信你可以猜到它在幕后做了什么:P / Invoke。
有一些方法可以从注册表中获取它,但这不是官方API,而且不太优雅的IMO。
所以回答你的问题,你已经以非常好的和专业的方式做到了。
答案 1 :(得分:0)
如果你想偷偷摸摸,你可以通过注册表来弄清楚。安装MSI后,Windows会在以下位置创建一组注册表项:
HKLM \ SOFTWARE \微软\的Windows \ CurrentVersion \卸载\<被改写的,产品代码>
或
HKLM \ SOFTWARE \ Wow6432Node \微软\的Windows \ CurrentVersion \卸载\<被改写的,产品代码>
(取决于您的机器/ MSI位数)
在该注册表位置下,应该有一个名为“ProductVersion”的注册表值。诀窍是知道如何'munge'一个窗口GUID(见http://www.vmwareinfo.com/2011/09/surgically-eliminating-windows.html)。