使用windows api读取当前安装的应用程序版本

我试图使用Windows API来找出已安装的应用程序的版本信息。

我使用升级代码来查找使用MsiEnumRelatedProducts API的产品代码,但是当我尝试使用产品代码使用MsiGetProductInfo时,版本信息作为垃圾回来。

这里是我的MsiGetProductInfo api:

[DllImport("msi.dll", CharSet = CharSet.Unicode)] private static extern Int32 MsiGetProductInfo( string product, string property, [Out] StringBuilder valueBuf, ref Int32 len); MsiGetProductInfo(sbProductCode, "INSTALLPROPERTY_INSTALLVERSION", builder, ref len); 

任何想法,我在做什么错了?

这是我做了什么,我解决了我的问题。

  Int32 m_len = 11512; StringBuilder m_versionInfo = new StringBuilder(m_len); StringBuilder m_sbProductCode = GetProductCodeFromMsiUpgradeCode(); MsiGetProductInfo(m_sbProductCode.ToString(), "**VersionString**", m_versionInfo, ref m_len); return m_versionInfo.ToString(); 

这没有返回我的版本字符串,也从十进制转换为像1.4.3字符串格式。

为了响应@JoshHetland,要传递的字符串是INSTALLPROPERTY_VERSIONSTRING的CamelCase后缀 – 记住MSI是区分大小写的。

所以:

INSTALLPROPERTY_VERSIONSTRING变成VersionString

INSTALLPROPERTY_INSTALLDATE成为InstallDate

等等。

完整的可用属性列表位于MsiGetProductInfo函数的MSDN页面上 。

Application.ProductVersion为我工作,不需要手动调用WinAPI(虽然我仍然在.net 1.1中)