0

我需要使用产品代码 GUID 查找已安装应用程序的产品版本。有没有办法使用某种简单的 API 调用来做到这一点?我找到了使用 P/Invoke 和 WindowsInstaller 命名空间的方法,但我试图避免使用 P/Invoke。

4

2 回答 2

1

如您所见,Windows Installer 公开了 Win32 API 函数 (P/Invoke)。它还具有包装这些 API 的 COM 自动化接口,但我敢肯定你可以猜到这更不优雅。Windows Installer XML (WiX) 部署工具基础 (DTF) 有一个 MSI 互操作库,将其包装为托管代码,但我相信您可以猜到它在幕后所做的事情:P/Invoke。

有多种方法可以从注册表中获取它,但这不是官方 API,而且 IMO 也不那么优雅。

因此,要回答您的问题,您已经以一种非常好的和专业的方式来做这件事。

于 2013-08-05T22:02:18.600 回答
0

如果您想偷偷摸摸,可以查看注册表以找出答案。安装 MSI 时,Windows 会在以下位置创建一组注册表项:
HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall\<munged-ProductCode>

HKLM\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\<munged-ProductCode >
(取决于您的机器/MSI 位数)

在该注册表位置下应该有一个名为“ProductVersion”的注册表值。诀窍是要知道如何 'munge' Windows GUID(请参阅http://www.vmwareinfo.com/2011/09/surgically-eliminating-windows.html)。

于 2013-08-09T03:29:25.153 回答