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

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

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

Re[20]: ランタイムパッケージインストール済みチェック方法 [1]


(過去ログ 28 を表示中)

[トピック内 28 記事 (21 - 28 表示)]  << 0 | 1 >>

■13160 / inTopicNo.21)  Re[18]: ランタイムパッケージインストール済みチェック方法
  
□投稿者/ セイン (53回)-(2008/01/25(Fri) 10:32:27)
ありがとうございます^^

現在お試しで、プロダクトコード&ソフト名を列挙するソフトを作成してみています。
これができれば、後はプロダクトコードを使ってインストール済みかどうかチェックすればよさそうです。
引用返信 編集キー/
■13169 / inTopicNo.22)  Re[19]: ランタイムパッケージインストール済みチェック方法
□投稿者/ とっちゃん (233回)-(2008/01/25(Fri) 12:02:45)
とっちゃん さんの Web サイト
No13160 (セイン さん) に返信
WMI はインストールしている「もの」しかチェックできないので Setup Auther が利用するよりディープな方法をw

Orca はご存知でしょうか?(Orcas=VS2008ではありませぬ)

もし、知らなかったというのであればこの機会にその存在を知っていただけると嬉しいわけですがw
Orca は、msi/msm などのインストーラパッケージファイルのエディタです。
#msi とそれにまつわるさまざまなものを編集、検証できるGUIツールです(msiのための統合環境見たいなものw)

PlatformSDK/WindowsSDK に添付されていますので(そのままではインストールされない)、
インストール先の bin ディレクトリにある、Orca.msi を実行してインストールしておくとよいです。
VS2008の場合、SDKがほぼフルセット(サンプルと、ヘルプがないだけ)なので、こちらの場合も入っています。

こいつを使って先のファイルをチェックする方法を書いておきますね。
#あとでネタにしようかなぁ...w

さて、本題。
vcregist_x86.exe など、MS製のランタイムインストーラと呼ばれるものの多くは、exe にラッピングされています。
#アイコンが同じなので覚えておくといいですw

これらのファイルは自己展開型パッケージャと呼ばれるもので、それ単体ではあらかじめ内包された(多分作るツールが中にはあるw)
ファイルを展開し、指定されたファイルを実行する機能しか持っていません。

ただし、秀逸なのは常に実行してしまうのではなく、展開だけを行う機能を持っているというところです。

この展開機能を使うことで、パッケージャが抱えているファイルを、適当なところに展開し中身を参照することができます。

MSのものの場合、/C /T:<展開先のフルパス> とコマンドライン引数を与えることで中のファイルが展開できます。
vcregist_x86 や dotnetfx などは、展開すると msi ファイルを吐き出してきます。
#中には複数のmsiファイルがあるものもありますし、msi ではないインストーラ形式のものもあるので注意してください。

msi ファイルであれば、先に書いた orca で中を自由に閲覧できますので、既定の情報を読み取ることで、
インストーラのProductCodeを知ることができます。

WindowsInstaller では、このProductCode を基にしてインストールされているかどうかを検査しますので
これを見つけ出すことができれば、チェックも素早く行えるようになるということになります。

さて、その具体的な方法ですが、ProductCode は、Property(.NET のそれとは違うもの)というテーブルに格納されていますので
そのテーブル(Orcaの左のペインのどこかにある)を選択します。

そうすると、右側にProperty として格納されたものが一覧で出てきますので、その中から、ProductCode を探し
その値を取得します。

あとは、MsiQueryProductState など、ProductCode を必要とするAPIに渡せば様々な情報を得ることができるというわけです。

引用返信 編集キー/
■13173 / inTopicNo.23)  Re[20]: ランタイムパッケージインストール済みチェック方法
□投稿者/ セイン (54回)-(2008/01/25(Fri) 12:21:14)
プロダクトコードの列挙
http://www.wac-jp.com/programmers/win32/MsiHelper_EnumProductCodes.html
プロダクト情報の取得(二つ目の引数にINSTALLPROPERTY_INSTALLEDPRODUCTNAMEを渡して、プログラム名の確認)
http://www.wac-jp.com/programmers/win32/MsiHelper_GetProductInfo.html

この2つで、取れたプロダクトコードが↓(日本語はわかりやすいように直しえています)
"{7131646D-CD3C-40F4-97B9-CD9E4E6262EF}", " ・.NET Framework 2.0\n"
"{A8B6F571-EA7C-4128-811A-E1CD38334387}", " ・.NET Framework 2.0 日本語パック\n"
"{7299052b-02a4-4627-81f2-1818da5d550d}", " ・Microsoft Visual C++ 2005 SP1 再頒布可能パッケージ (x86)\n"

こんな感じですかね?インストール済みなものについてはこれでいけそうです^^

とっちゃんさんの方法すごくためしたい!
昨日指示いただいたとおり、ソフトのダウンロードはできていたため、インストールはできました。

しかし下記コマンドを実行しましたが、
C:\vcredist_x86.exe /C /T:C:\POI
途中で止まってしまいます。

C:\POI の下にVCREDI~3.EXEという残骸だけが残る

こちらはなぜでしょうか?


引用返信 編集キー/
■13177 / inTopicNo.24)  Re[21]: ランタイムパッケージインストール済みチェック方法
□投稿者/ とっちゃん (234回)-(2008/01/25(Fri) 13:25:25)
とっちゃん さんの Web サイト
No13173 (セイン さん) に返信
> しかし下記コマンドを実行しましたが、
> C:\vcredist_x86.exe /C /T:C:\POI
> 途中で止まってしまいます。
> 
> C:\POI の下にVCREDI~3.EXEという残骸だけが残る
> 
> こちらはなぜでしょうか?
> 
Vista マシンですが、C:\ にvcregist_x86.exe をコピーしてそのまま書かれてるとおりに
実行してみましたけど、問題なく実行できましたよ?

もし、Vista マシンで実行しているのであれば、ルートディレクトリではなく、
適当なサブディレクトリを作ってそこで実験してみてはいかがでしょうか?
うまく展開できれば
  date       time     dos name        size      attr   filename
---------- -------- ------------ ------------- ------ ----------------------
2006/12/02 07:31:04                    252,968      A vcredis1.cab
2006/12/02 07:09:06                  2,818,048      A vcredist.msi
という2つのファイルが吐き出されるはずです。
#表がくずれちゃうので図表モードで出力してます

引用返信 編集キー/
■13181 / inTopicNo.25)  Re[17]: ランタイムパッケージインストール済みチェック方法
□投稿者/ とっちゃん (235回)-(2008/01/25(Fri) 13:50:02)
とっちゃん さんの Web サイト
No13126 (セイン さん) に返信
>
> インテルのライブラリや.NET Framework 2.0のインストールチェックも下の関数でできるのであれば、
> 統一したいです!
>
こっち忘れてた...w

インテルのライブラリについては、専用のランタイムインストーラがどういう形なのかが
わからないので、何とも言えません。

持ってませんしねw

で、.NET Framework 2.0 のインストールチェックですが、こちらは「公式には」
msi の ProductCode による判定ではなく、専用のEXEによるチェック方法になります。

実際に、Vistaマシンでチェックするとわかりますが ProductCode で検査しても
インストールされていないと判断されます。

VSセットアップでは、dotnetfx フォルダにある dotnetchk.exe を呼び出して
その戻り値で判断するという形で規定されています。
#このあたりの詳細は、Package.xml や Product.xml を参照してください

実際は、.NET Framework のレジストリがあるのでそこのセットアップ情報を見て
判断も可能なはずなのですが、どういうわけか、.NET Framework 2.0 については
この情報が公開されていません(1.0 や 1.1はある。3.0以降も必須モジュールでは
レジストリチェックなので事実上公開されているに等しい)。

なので、msi 形式のインストーラがあるからといっても必ずしもそれだけに
頼ることができるというわけではないということは覚えておいてください。

ランタイムインストーラを提供している場合、その提供元からインストールチェックの
方法がドキュメント化されているあるいは、インストールの方法そのものが
公開されているはずです(この点に関してのMSはお世辞にも親切とは言えない)。

ですので、まずは根気よくランタイムインストーラの配布に関する事項を
探してみるということから始めることをお勧めします。

引用返信 編集キー/
■13192 / inTopicNo.26)  Re[18]: ランタイムパッケージインストール済みチェック方法
□投稿者/ セイン (55回)-(2008/01/25(Fri) 16:36:42)
2008/01/25(Fri) 19:19:17 編集(投稿者)

あうぅ。.NETって無理だったんですか・・・。WindowsXP SP2ではできているように見えたのですが、
Vistaではできないんですね^^;

覚えておきます。

インテルのライブラリに関しては、msiから抜き取ったプロダクトコードにて判断できました。
ありがとうございます。

>C:\vcredist_x86.exe /C /T:C:\POI
こっちは相変わらず、VCREDI~3.EXEというなぞのファイルができるだけです^^;
プロダクトコードがわかっているので問題ないといえばないのですが、悔しいですねぇ。



No13181 (とっちゃん さん) に返信
> ■No13126 (セイン さん) に返信
>>
>>インテルのライブラリや.NET Framework 2.0のインストールチェックも下の関数でできるのであれば、
>>統一したいです!
>>
> こっち忘れてた...w
>
> インテルのライブラリについては、専用のランタイムインストーラがどういう形なのかが
> わからないので、何とも言えません。
>
> 持ってませんしねw
>
> で、.NET Framework 2.0 のインストールチェックですが、こちらは「公式には」
> msi の ProductCode による判定ではなく、専用のEXEによるチェック方法になります。
>
> 実際に、Vistaマシンでチェックするとわかりますが ProductCode で検査しても
> インストールされていないと判断されます。
>
> VSセットアップでは、dotnetfx フォルダにある dotnetchk.exe を呼び出して
> その戻り値で判断するという形で規定されています。
> #このあたりの詳細は、Package.xml や Product.xml を参照してください
>
> 実際は、.NET Framework のレジストリがあるのでそこのセットアップ情報を見て
> 判断も可能なはずなのですが、どういうわけか、.NET Framework 2.0 については
> この情報が公開されていません(1.0 や 1.1はある。3.0以降も必須モジュールでは
> レジストリチェックなので事実上公開されているに等しい)。
>
> なので、msi 形式のインストーラがあるからといっても必ずしもそれだけに
> 頼ることができるというわけではないということは覚えておいてください。
>
> ランタイムインストーラを提供している場合、その提供元からインストールチェックの
> 方法がドキュメント化されているあるいは、インストールの方法そのものが
> 公開されているはずです(この点に関してのMSはお世辞にも親切とは言えない)。
>
> ですので、まずは根気よくランタイムインストーラの配布に関する事項を
> 探してみるということから始めることをお勧めします。
>
引用返信 編集キー/
■13347 / inTopicNo.27)  Re[19]: ランタイムパッケージインストール済みチェック方法
□投稿者/ セイン (59回)-(2008/01/28(Mon) 13:11:04)
すいません。平日のみ仕事なので、お返事できませんでした。
タイトルの項目は問題なく解決いたしました。ありがとうございます^^

解決済み
引用返信 編集キー/
■13350 / inTopicNo.28)  Re[20]: ランタイムパッケージインストール済みチェック方法
□投稿者/ とっちゃん (236回)-(2008/01/28(Mon) 14:21:02)
とっちゃん さんの Web サイト
No13347 (セイン さん) に返信

本題とはかけ離れますが、気にしてるような気がしたので。

> すいません。平日のみ仕事なので、お返事できませんでした。

回答がつくのをずっと待ち続けなきゃというものじゃありませんし
回答がついたからと言って即座に返答しなきゃというものでもありません。

なので、気にする必要はありませんよ。



解決済み
引用返信 編集キー/

<前の20件
トピック内ページ移動 / << 0 | 1 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -