| ■13000 / ) |
Re[1]: ランタイムパッケージインストール済みチェック方法 |
□投稿者/ とっちゃん (224回)-(2008/01/23(Wed) 13:11:22)
|
■No12998 (セイン さん) に返信
> このたび、Microsoft Visual C++ 2005 SP1 再頒布可能パッケージ (x86)が > インストール済みかどうかをチェックするソフトを、 > Win32プロジェクト(C++)で作成することになりました。 > (MFCを使ってしまうと、ランタイムが入っていないので動かなくなるため) > > 上記ソフトのインストール済みチェック方法をご存知の方いらっしゃれば教えてください。 > いくつかパターンがあるのですが... 方法としては 「再頒布可能パッケージ」そのもののインストールを確認したいのか それとも、 SP1対応版のMSVCR80.DLL(ほか)がインストールされているかを確認したいのか というところは重要ですね。 前者の場合、そのマシンのオーナー(要するにエンドユーザー)が自分で選んでアンインストールしない限り残っていますが 後者の場合は、入れたソフトのアンインストールとともに消えてしまう可能性もあります。
ま、「ふつうは」そういうことを考慮しなくてもいいように、インストーラを作るわけですけど...w
ちなみに前者であれば、「再頒布可能パッケージ」がインストールされているかを公式に判断する方法としては MsiQueryProductState API を使って判断するというのが正しいやり方となります。
判断方法は、 if( MsiQueryProductState( _T("{7299052b-02a4-4627-81f2-1818da5d550d}") ) >= INSTALLSTATE_ABSENT ) { // インストール済み } です。 ちなみに、VS2005(Not Express) にSP1をあてた環境だと、Product.xml の判断方法が間違っています。 #これを書きながら確認
対策方法は、product.xml の {A49F249F-0C91-497F-86DF-B2585E8E76B7} と書かれているところを 上記の {7299...} に変更するという形になります。
これ、フィードバックしないとまずいな。 #ショーストッパーものの致命的なバグなんだけどなぁ...おいらにとってはw
|
|