2017-01-22 10 views
0

私は、いくつかのサービスをインストールするwixによってインストールが作成されています。サービスはカスタムアクションによってインストールされ、WIXではインストールできません。その理由のいくつかは変更できません。 アップグレードしてからFilesInUseダイアログが表示されない限り、インストールは正常に機能します。私は自分のカスタムアクションで自分自身でファイルを処理したいと思います。WixでInstallValidateの前にカスタムアクションを実行

InstallInstanceを使用する前にカスタムアクションを実行する方法はありますか?私は一般的なWIX UIを使用しています。

InstallUIsequence、InstallExecutionSequence(InstallValidateの前)、および再起動マネージャーコントロールを無効にしてみました。

<CustomAction Id="StopServices" 
       BinaryKey="CustomActionsDLL" 
       DllEntry="StopServices" 
       Execute="immediate" 
       Return="check"/> 

任意の提案:何も

マイカスタムアクション(多分私は間違っている配列の一つにこれを追加しました)..働いていますか?

答えて

1

ビルトインWiX/MSI機能の代わりにカスタムアクションでサービスをインストールする必要がある場合でも、WiX ServiceControlを使用してサービスを停止することはできません。 ServiceControlによってサービスが停止されることがWindowsインストーラによって判明した場合、InstallValidate時にFilesInUseは呼び出されません。あなたのサービスが何らかの方法で異なる場合、これはうまくいかないかもしれません - 例えば、一般的なDllを共有する子プロセスはFilesInUseダイアログを引き起こす可能性があります。私はあなたが冗長なログを見て、使用中のプロセスとファイルを見たと仮定します。

あなたのカスタムアクションの問題は、それがあなたのコードだということですが、実際には分かりにくいかもしれません。また、即時カスタムアクションの問題は、それらが昇格されておらず、おそらくサービスを停止できないことです。そうすれば、あなたのコードはControlServiceの結果などをチェックしますか?

+0

精巧な答えをありがとう。 サービスは実際にサービスではありません。それが問題です。 FilesInUseは機能しますが(時には失敗することもありますが)、ユーザーにはprompetdしたくありません。 FilesInUseダイアログの後に、私はサービスを停止して再インストールするので、FilesInUseステップをスキップします。 洞察はありますか? – Lipo

関連する問題