2016-07-14 14 views
0

5つのドライバをインストールするために使用されるWixツールセットで作成された.msiファイルがあります。また、msiexec.exeコマンドでCreateProcessで.msiを起動し、UIを提供するセットアップアプリケーションがあります。現在、私の要件は、インストールの詳細な結果を取得することです。どのドライバが正常にインストールされたかは失敗しました。私はCreateProcessの結果を得ることができるので、インストールの詳細な結果をどのように取得できますか?この問題に関するいくつかの情報を提供できれば非常に感謝しています。あなたが/のL * Vパラメータを使用して詳細なインストールログを取得することができますmsiのインストールから詳細な結果を取得する方法

<difx:Driver AddRemovePrograms="no" DeleteFiles="no" ForceInstall="no" Legacy="no" PlugAndPlayPrompt="no" /> 

答えて

0

:以下のようなドライバーのフラグ:

msiexec /i "C:\MyPackage\Example.msi" /L*V "C:\log\example.log" 

あなたがすることができ、私はDIFXで.msiファイルを作成し

続きを読むhere

一般的な構造は次のとおりです。

msiexec.exe [/i][/x] <path_to_package> [/L{i|w|e|a|r|u|c|m|o|p|v|x+|!|*}][/log] 

/L - enable logging i - include status messages w - include non-fatal warnings e - include all error messages a - mention when an action is started r - include action-specific records u - include user requests c - include the initial UI parameters m - include out-of-memory or fatal exit information o - include out-of-disk-space messages p - include terminal properties v - verbose output x - include extra debugging information + - append to an existing log file ! - flush each line to the log * - log all information, except for v and x options

0

もう一つの簡単な方法は、代わりにログを解析する、マシン上check if the drivers are installedに小さなC#のカスタムアクションを書くことであろう。

インストール処理の最後にカスタムアクションを延期する(即時ではない)ようにスケジュールする必要があります。

0

ログを生成することができます(Harshで提案されているように)。またはカスタムアクションを作成することもできます(カスタムメソッドを使用している場合はBogdanの提案に従って延期するか、InstallFinalizeの後にシーケンスします)。標高を必要としません)、そのカスタムアクションはおそらく何らかの種類のIPCを使用して、あなたのプログラムに戻ったものを伝える必要があります。

IPCのための一つの可能​​性はあなたがあなたのアプリケーションで受け取ることができINSTALLMESSAGE_INFOメッセージタイプ(あなたもログに表示されます送信するもの)を使用してカスタムアクションでMsiProcessMessage機能かもしれないが、それはMsiSetExternalUIRecord機能を使用して必要になりますmsiexecを呼び出すCreateProcessを、そのページの「インストールと構成の機能」セクションの何かに置き換える必要があります。

また、カスタムアクションを作成する必要がない場合は、MsiGetFeatureState or MsiGetComponentStateMsiOpenProductと電話をかけるほうが簡単かもしれませんが、後で詳細を細かく指定すると仮定します。

1

MSIベースの設定はトランザクションです。それはすべての作業またはすべてが失敗し、システムを以前の状態にロールバックします。あなたはこのパラダイムを打ち負かす選択肢を作ったと思われます。

また、エラー情報が見つからないようにインストーラのUIを表示していないようです。

私は2つの勧告があります

  1. はのCreateProcess()と使用「火を忘れてしまう」モデルをしないでください。使用MsiSetExternalUIRecordは、このモデルで:

https://msdn.microsoft.com/en-us/library/windows/desktop/bb309215(v=vs.85).aspx

P /あまりにもそこに同等物を呼び出すC#があります。すべてのUIを表示したくない場合は、エラーメッセージを収集し、それが目標であればユーザーに表示してください。それが実際のエラーメッセージを得る唯一の信頼できる方法です。これは、UIを所有し、重要と思われるメッセージのみを収集するためのサポートされた方法です。

  1. ドライバのインストールに失敗してインストール全体が失敗し、すべてをロールバックできるようにします。それは実際にはすでにこれのようになっているかもしれません。インストールが部分的に成功し、4つのドライバがインストールされていない場合、計画は何ですか?修復/メンテナンスモードに入るので、MSIを再度実行することはできません。ユーザーが何かを修正してインストールを再実行する必要がある場合は、とにかに製品をアンインストールする必要があります。
関連する問題