2012-01-11 33 views
0

基本的に、特定のハードウェアがインストールされているかどうかを検出するためにdevcon.exe(Windowsハードウェアマネージャのコマンドラインバージョン)を実行できるWIX msiを構築しようとしています。インストールされている場合は、msi Aをインストールし、msi Bをインストールします(AとBはすでに別のmsiパッケージとして存在するため、ハードウェアに基づいた自動選択インストールが必要です)。選択インストールのためにWIX msiから埋め込みツールを実行しようとしています

現在、私はWIX SDKをインストールし、msiを正しく構築するWIXプロジェクトを作成しました。私はCustomActionsを実行してnotepad.exeを開くといった簡単なことができます。そのような簡単なことです。

第1の問題:ディレクトリにインストールされないファイルをインストーラにパッケージ化する方法がわかりません。私はそれへの参照を見つけましたが、それを明示する方法は明示されていません。ホストドライブにインストールされない場合は、「Directory」タグの中に入れる必要はありません。

第2の問題:devcon.exeは、私が間違っていると私に正しいことを伝えることができません。それは、それが何を見つけるかによって戻り値を変更するようです。おそらく、ハードウェアデバイスが存在するかどうかに制限されます。だから私はそれを埋め込み、それを実行することができれば、どういうふうにそれが標準出力ストリームに出力するものを取り、それから私が探している特定の値のためにそれを解析する必要があります。

私は既にパースを行うことができ、私が知る必要があることを教えてくれる環境変数を設定できるバッチファイルを持っているので、少し楽になりますが、バッチファイルを埋め込みdevcon.exeを参照するように取得し、WIXに変数を読み込ませたり、おそらくWIXで1つ(またはプロパティ)を設定してバッチファイルから設定することができますか?

おそらく、代わりにdllカスタムアクションを作成する必要がありますか? DLLのカスタムアクションから埋め込み実行ファイルを実行することは可能ですか? devcon.exeを実行してそこですべての解析を行い、単にWix変数またはプロパティを設定して次に何をするかを選択することができます。

第3の問題:別のmsiを実行することができます。私はまだそれほど気にしていませんが、私はそれをすべて読んでいないが有望に見える(http://softwareinstall.blogspot.com/2008/06/fun-with-msiembeddedchainer.html)まだ。一度に一つの問題は、私は確かに既に十分:)持っ

答えて

0

さて、最初の問題は解決されています

<Binary Id="Devcon" SourceFile="D:\Programming\Device_Selection\Device_Selection\devcon.exe"/> 
<CustomAction Id="RunDevcon" BinaryKey="Devcon" ExeCommand="resources *vendor*device*" Return="check" Execute="deferred" Impersonate="no" /> 

これはdevcon.exeツールはインストーラに埋め込まれていることを保証し、私ができること管理者モードで実行します(偽装を "いいえ"に指定し、実行を "延期"に指定しない限り動作しません)。

私がする必要があるのは、devconが通常コンソール(cmdウィンドウ)に送信した出力を読み込んで情報を解析することです。その出力をキャプチャする方法はありますか?

0

第2の問題は、devcon.exeを起動し、その出力を読み込んで解析するEXEまたはDLLカスタムアクションを作成することです。 devcon.exe自体は、EXE/DLLのリソースに格納され、起動する前に一時ディレクトリに展開され、終了したら削除することができます。

DLLを選択すると、MSIのパブリックプロパティを変更できます。そうすれば、MSIで次に何が行われるかを制御するプロパティを設定できます。

EXEを選択した場合は、終了コードがあります。私が知る限り、実際にMSIでそれを行うことはあまりありません。


MSIインストールの連鎖は推奨されません。両方のドライバを1つのパッケージに組み込み、devcon.exeの検出結果として設定されたプロパティに応じて、インストールするコンポーネントを選択することができます。


別のアプローチは、devcon.exeを実行してインストールするパッケージを決定するブートストラップEXEを作成することです。次に、正しいMSIパッケージをインストールするだけです。

関連する問題