c # - Læsning af den nuværende installerede version af et program ved hjælp af windows api

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg forsøgte at bruge windows api til at finde ud af versionsoplysningerne for et installeret program.


Jeg brugte opgraderingskoden for at finde ud af produktkoden ved hjælp af MsiEnumRelatedProducts api, men når jeg forsøger at bruge MsiGetProductInfo ved hjælp af produktkoden, kommer versionsoplysningerne tilbage som skrald.


Her er min 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);


Eventuelle tanker om hvad jeg gør galt?

Bedste reference


Her er hvad jeg gjorde, at jeg løste mit problem.


        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();


Dette returnerede mig versionsstrengen og konverteredes også fra decimal til strengformat som 1.4.3.

Andre referencer 1


Som svar på @JoshHetland er den streng, der skal passere, CamelCase postfixet på INSTALLPROPERTY\_VERSIONSTRING - husk at MSI er hovedkvalitetssag.


Så:


INSTALLPROPERTY\_VERSIONSTRING bliver VersionString


INSTALLPROPERTY\_INSTALLDATE bliver InstallDate


og så videre.


Komplet liste over tilgængelige egenskaber findes på MSDN-siden for funktionen MsiGetProductInfo. [8]

Andre referencer 2


Application.ProductVersion virker for mig, ikke nødvendigt at ringe WinAPI manuelt (jeg er stadig i. Net 1.1 though)