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

时间:2011-09-10 20:52:26

标签: c# windows winapi

我试图使用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);

对我做错了什么的想法?

3 个答案:

答案 0 :(得分:2)

这就是我所做的,我解决了我的问题。

        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。

答案 1 :(得分:2)

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

所以:

INSTALLPROPERTY_VERSIONSTRING变为VersionString

INSTALLPROPERTY_INSTALLDATE变为InstallDate

等等。

可用属性的完整列表位于MSDN page for the MsiGetProductInfo function

答案 2 :(得分:0)

Application.ProductVersion适用于我,无需手动调用WinAPI(我仍然在.Net 1.1中)