製品コード GUID を使用して、インストールされているアプリケーションの製品バージョンを見つける必要があります。ある種の単純な API 呼び出しを使用してこれを行う方法はありますか? P/Invoke と WindowsInstaller 名前空間を使用してそれを行う方法を見つけましたが、P/Invoke の使用を避けようとしています。
2 に答える
Windows インストーラーは、発見したように Win32 API 関数 (P/Invoke) を公開します。また、これらの API をラップする COM オートメーション インターフェイスも備えていますが、これはさらに洗練されていないことはご想像のとおりです。Windows Installer XML (WiX) Deployment Tools Foundation (DTF) には、それをマネージ コードとしてラップする MSI 相互運用ライブラリがありますが、それが内部で何をしているのかは推測できると思います: P/Invoke.
レジストリから取得する方法はありますが、これは公式の API ではなく、IMO としてはあまり洗練されていません。
あなたの質問に答えるために、あなたはすでに非常に優れた専門的な方法でそれを行っています.
卑劣になりたい場合は、レジストリを調べて把握することができます。MSI がインストールされると、Windows は一連のレジストリ キーを次の場所に作成します:
HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall\<munged-ProductCode>
または
HKLM\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\<munged-ProductCode >
(お使いのマシン/MSI ビット数によって異なります)
そのレジストリの場所の下に、「ProductVersion」という名前のレジストリ値があるはずです。秘訣は、Windows GUID を「変更」する方法を知ることです ( http://www.vmwareinfo.com/2011/09/surgically-elimininating-windows.htmlを参照)。