基本的に、特定のハードウェアがインストールされているかどうかを検出するために devcon.exe (Windows ハードウェア マネージャーのコマンド ライン バージョン) を実行できる WIX msi を構築しようとしています。そうである場合は、msi A をインストールし、そうでない場合は msi B をインストールします (A と B は、別の msi パッケージとして既に存在します。ハードウェアに基づく自動選択インストールが必要です)。
現在、WIX SDK をインストールし、msi を正しくビルドする WIX プロジェクトを作成しました。CustomActions を実行して notepad.exe を開くなど、簡単なことを実行できます。
1 番目の問題: ディレクトリにインストールされないファイルをインストーラーにパッケージ化する方法がわかりません。私はそれへの参照を見つけましたが、それを行う方法を明示的に述べている場所はどこにもありません. ホスト ドライブにインストールしない場合は、「Directory」タグ内に配置する必要はありませんよね?
2 番目の問題: devcon.exe は (私が知る限り、間違っている場合は訂正してください) 検出した内容に応じて戻り値を変更しているようには見えません。ハードウェア デバイスが存在するかどうか。したがって、それを埋め込んで実行できる場合は、何らかの方法で標準出力ストリームに出力するものを取得し、探している特定の値を解析する必要があります。
もちろん、解析を実行し、知る必要があることを教えてくれる環境変数を設定できるバッチ ファイルを既に持っているので、少し簡単ですが、両方を埋め込むことができれば、どうすれば取得できますか埋め込まれたdevcon.exeを参照するバッチファイルを作成し、WIXに変数を読み取らせるか、またはWIXで変数(またはプロパティ)を設定してからバッチファイルから設定できますか?
たぶん、代わりに dll カスタム アクションを作成する必要がありますか? 埋め込まれた実行可能ファイルを dll カスタム アクションから実行することはできますか? 次に、devcon.exe を実行し、そこですべての解析を行い、次に何をするかを選択するために Wix 変数またはプロパティを設定するだけです。
3 番目の問題: ある msi を別の msi から実行できること。私はまだこれに慣れていませんが、すべてを読んだわけではありませんが、有望に見える (http://softwareinstall.blogspot.com/2008/06/fun-with-msiembeddedchainer.html) を見つけました。まだ。一度に1つの問題、私は確かにもう十分です:)