2011-09-10 9 views
3

インストールされているアプリケーションのバージョン情報を調べるためにWindows APIを使用しようとしていました。windows apiを使用して現在インストールされているバージョンのアプリケーションを読む

私はMsiEnumRelatedProducts APIを使用して製品コードを見つけるためにアップグレードコードを使用しましたが、製品コードを使用してMsiGetProductInfoを使用しようとすると、バージョン情報がゴミとして戻ってきます。私が間違ってやっているの

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

任意の考え:私のMsiGetProductInfo APIは、ここで

のですか?

+1

自分で解決しました。私は、文字列プロパティをVersionStringを使用するように変更しなければなりませんでした。 – alice7

+1

あなたはあなたのコードを回答として掲示するべきです。 – TMB

+0

TMBを指摘してくれてありがとう、私は次回以降も心配しない。 – alice7

答えて

2

をWinAPIのを呼び出す必要は私は私は私の問題を解決することをやったことではありません。

 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のような文字列形式に小数点からも変換しました。

+0

使用する適切な文字列はどこにありますか?私は 'INSTALLPROPERTY_VERSIONSTRING'、 'ProductVersion'、 'INSTALLPROPERTY_VERSION'とそれ以外のすべての表現を試してみました。 'VersionString'はどこにも見つかりませんでした。実際の値のリストはどこかにありますか? ? TIA – JoshHetland

0

Application.ProductVersionが私のために動作しますが、ここでは(私もネット1.1でまだ午前)手動

+0

@エリック:私はちょうど私の質問を更新しました。私はこれが現在のアプリケーションのために行うだろうと思う。 – alice7

+0

一般に、System.DiagnosticsのFileVersionInfoを使用できます。FileVersionInfo oFileVersionInfo = FileVersionInfo.GetVersionInfo(sSomeFileName);文字列sVersion = oFileVersionInfo.FileVersion; –

+0

@エリック:あなたがファイルがその場所にインストールされることを前提としているので、私の意見では、fileversionの使用は安全なアイデアではありません。 Windows APIを使用する方が良い選択肢になります。 – alice7

1

@JoshHetlandに対する応答では、渡す文字列はINSTALLPROPERTY_VERSIONSTRINGのCamelCaseの後置です - MSIは大文字と小文字を区別します。だから、

INSTALLPROPERTY_VERSIONSTRINGはそうでInstallDate

なり、VersionString

INSTALLPROPERTY_INSTALLDATEになります。

利用可能なプロパティの完全リストはMSDN page for the MsiGetProductInfo functionです。

関連する問題