C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 28 を表示中)
■13000 / )  Re[1]: ランタイムパッケージインストール済みチェック方法
□投稿者/ とっちゃん (224回)-(2008/01/23(Wed) 13:11:22)
とっちゃん さんの Web サイト
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

返信 編集キー/


管理者用

- Child Tree -