お客様の場所にインストールされるアプリケーションがあります。このアプリケーションは、Windowsサービスとして実行されている自己ホスト型のWCFサーバーと、この問題に関係のないクライアントアプリケーションで構成されています。
WiXで生成された.msiファイルをバックグラウンドでダウンロードし、お客様がインストールを選択したときにインストールされるようにすることで、更新をお客様に公開します。インストール手順は次のとおりです。
- サーバーはブートストラッパーアプリケーションを一時パスにコピーして実行し、インストールするMSIファイルへのパスを渡します
- ブートストラッパーは、MSIファイルのアップグレードコードを使用して以前のバージョンをアンインストールしてから、新しいバージョンをインストールします。のようなMSIに関連するさまざまなP/Invoke呼び出しを使用してインストーラーを呼び出します
MsiInstallProduct
。 - ブートストラッパーはサービスを再開します
問題は、ほとんどの顧客サイトに電話をかけると、この自動化されたプロセスが失敗することですが、他のすべての場合と同様に、私たちの場所でのテストと本番の両方で機能します。アンインストール中に失敗することもありますが、通常はインストール中に失敗します。エラーコード1601(InstallServiceFailure)と1603(InstallFailure)は、何が悪かったのかを判断するのにまったく役に立たないのと同じくらい一般的です。
ユーザーがWindows内からブートストラッパーを実行してインストーラーを手動で呼び出すことができるバックアップ手順があります(もちろん、管理者として実行が必要です)。このプロセスは確実に機能し、失敗した自動プロセスとまったく同じインストールロジックを使用します。
すべてのサービスは、少なくともサーバーボックスの管理者権限を持つアカウントとして実行されています。
エラーの原因についてより多くの情報を見つけようとするか、さらに良いことに、そもそもエラーを防ぐために、どこから始めればよいでしょうか。
編集失敗したインストールの詳細ログファイルの一例を次に示します。
=== Verbose logging started: 3/29/2013 8:23:30 Build type: SHIP UNICODE 5.00.7600.00 Calling process: <<PATH TO MSI>> ===
MSI (c) (00:7C) [08:23:30:194]: Resetting cached policy values
MSI (c) (00:7C) [08:23:30:262]: Machine policy value 'Debug' is 0
MSI (c) (00:7C) [08:23:30:418]: ******* RunEngine:
******* Product: <<PATH TO MSI>>
******* Action:
******* CommandLine: **********
MSI (c) (00:7C) [08:23:30:491]: Client-side and UI is none or basic: Running entire install on the server.
MSI (c) (00:7C) [08:23:30:520]: Grabbed execution mutex.
MSI (c) (00:7C) [08:23:30:562]: Failed to connect to server. Error: 0x800703FA
MSI (c) (00:7C) [08:23:30:605]: Failed to connect to server.
MSI (c) (00:7C) [08:23:30:637]: MainEngineThread is returning 1601
=== Verbose logging stopped: 3/29/2013 8:23:30 ===