使用已安装产品的升级代码获取产品版本

时间:2011-09-08 19:16:35

标签: c# windows winapi

我正在尝试使用升级代码检索已安装的msi的产品版本。 我尝试使用MsiGetProductInfo api,但它没有返回结果。

我在HKEY_LOCAL_MACHINE \ SOFTWARE \ MSFT \ Windows \ CurrentVersion \ Uninstall下找不到该应用程序。

但相反,我确实在Installer \ Products下的注册表中找到了我的应用程序。

我知道类似的问题有bben在这里问:   Get Product Code of installed Msi

但有人有更好的方法。

谢谢

1 个答案:

答案 0 :(得分:0)

我刚才有同样的问题。如果您有升级代码GUID,则可以执行以下操作:

WindowsInstaller.Installer installer =
   Activator.CreateInstance(/* left as an exercise for the reader */);
foreach (string productCode in installer.get_RelatedProducts("your-upgradecode-guid")) {
   string productVersion = installer.get_ProductInfo(productCode, "VersionString");
}

麻烦的是,可能存在多个相关产品,因此您的处理方式取决于您。

编辑:如果您默认或错误地安装每个用户,那么如果您以不同于安装MSI的用户身份运行查询,则可能无法获得带有RelatedProducts的产品代码...即使安装是或多或少是公开的。