2016-06-02 23 views
1

自分のPCにMicrosoft Office 2013がインストールされています。 MsiGetProductInfoを使用して、その製品に関する情報を照会しようとしています(実際には、Wordがインストールされているかどうかを確認する必要があります)。MsiGetProductInfoを使用してMicrosoft Wordがインストールされているかどうかを確認します

ただし、次のC++コードは常にエラー1605ERROR_UNKNOWN_PRODUCT)を返します。これは、インストールされていないアプリケーションがインストールされているアプリケーションのリストに存在することを意味します。

TCHAR szVersion[20]; 
DWORD cchVersion = 20; 
LSTATUS st = MsiGetProductInfo(TEXT("{000209FF-0000-0000-C000-000000000046}"), INSTALLPROPERTY_VERSIONSTRING, szVersion, &cchVersion); 

のClassID {000209FF-0000-0000-C000-000000000046}は​​でレジストリに発見されたと私はそれがMicrosoft WordのアプリケーションCLSIDのために滞在する必要がありますと仮定します。

MsiGetProductInfoを正しく使用してMS Wordがインストールされていることを確認するにはどうすればよいですか?

答えて

3

MsiGetProductInfoはCLSIDではなくプロダクトコードを取得するため、この方法は機能しません。 Microsoft Officeで使用されているすべての製品コードを知っている場合(何百もの製品コードを意味する何百ものSKUがあると聞いています)、それらをすべて順番に検索できます。しかし、製品コードが2つしかなく、新しいコードを追加しない限り(または新しいバージョンをサポートしていない場合)、これは拡張されません。

Word.ApplicationクラスのレジストリフットプリントをCOMサーバーおよびそのファイルのバージョンブロックに戻す方がよい場合があります。または、MSIによってインストールされていると仮定すると、MsiEnumComponentsExを使用してインストールコンポーネントにファイルをトレースし、MsiEnumClientsExを使用して、そのコンポーネントをインストールした製品を見つけることができます。そしてそこからMsiGetProductInfoに戻ることができます。

これは、製品がMSI経由でインストールされ、フットプリントがレジストリに残っている場合にのみ機能することに注意してください。将来のバージョンがこのアプローチに従うかどうかは確かに言い難い。すべての既存製品がMSI経由でインストールされているとは限りません。Can't find installed Office 2013 Home and business with MsiEnumProducts

How to detect installed version of MS-Office?

をし、このような記事のコレクションもあり、これらは製品コードが原因ベータ版などの違いの最良の指標ではないことを示しているように見える:

関連する問題