2012-01-27 17 views
3

私はWiXを使い慣れていませんが、以前はInstallshieldとWindowsインストーラを使っていました。WiX:アンインストールでWindowsサービスが停止または削除されない

私は、Windowsサービスをセットアップするかなり簡単なインストーラだと思います。それは "NT AUTHORITY \ NETWORK SERVICE"の下に設定されます。

インストールはうまくいきますが、アンインストール中に「このセットアップではシステムが動作しているときに更新できないファイルやサービスをアップデートする必要があります」というメッセージが表示されます。セットアップ。"。 [OK]をクリックすると、サービスを除いてすべてがアンインストールされます(再起動後も)。それはまだ開始されており、サービスに関連するexeも残っています。

サービスを手動で停止して、sc.exeコマンドで問題なくサービスを削除できます。

また、アンインストールを実行する前にサービスを手動で停止しても、上記のプロンプトが表示されませんが、結果は同じです。サービスは残されており、ファイルもそのまま残っています。ここで

は私のウィックスの一部です:

<Component Id='cmpService' Guid='{542f970e-ca39-4501-aae4-9e03eaac9a25}' > 
    <File Id='ServiceExeFile' Name='nls.service.agent.exe' 
      ReadOnly='no' Compressed='yes' KeyPath='yes' Vital='yes' Hidden='no' System='no' 
      Checksum='no' /> 
    <ServiceInstall Id='MyServiceInstall' DisplayName='RaMP Data Collector' Name='rampDataCollector' 
      ErrorControl='normal' Start='auto' Type='ownProcess' Vital='yes' 
      Account='NT AUTHORITY\NETWORK SERVICE' /> 
    <ServiceControl Id='MyServiceControl' Name='rampDataCollector' 
      Start='install' Stop='uninstall' Remove='uninstall' Wait='yes' /> 
</Component> 

私は

  • アカウント= 'NT AUTHORITY \ NETWORK SERVICE' を離陸し、すべての私のGUIDを変更する
  • 同じ結果を得たを試してみましたちょうど確かめて、同じ結果を得ました。
  • 両方のシナリオ(アンインストール前に実行中のサービスとアンインストール前に停止したサービス)の詳細なログを見てください。しかし、私が解読できることは興味深いものは見当たりませんでした。

ここでは、アンインストールを実行してからサービスが手動で最初に停止されたときのmsiログの一部です。私は、サービスコンポーネントとMSIアクションの周りに部品を貼り付けました。

MSI (s) (A4:58) [10:44:11:080]: Component: cmpService; Installed: Local; Request: Absent; Action: Null 
MSI (s) (A4:58) [10:44:11:080]: Component: cmpFolderPermissions; Installed: Local; Request: Absent; Action: Absent 
MSI (s) (A4:58) [10:44:11:080]: Component: cmpApplicationShortcut; Installed: Local; Request: Absent; Action: Absent 

MSI (s) (A4:58) [10:44:11:876]: Doing action: StopServices 
Action ended 10:44:11: SchedSecureObjectsRollback. Return value 1. 
Action start 10:44:11: StopServices. 
MSI (s) (A4:58) [10:44:11:878]: Doing action: DeleteServices 
Action ended 10:44:11: StopServices. Return value 1. 
Action start 10:44:11: DeleteServices. 
MSI (s) (A4:58) [10:44:11:879]: Doing action: RemoveRegistryValues 
Action ended 10:44:11: DeleteServices. Return value 1. 

任意の助けいただければ幸いです。

私は最後の手段として、カスタムコマンドを実行して、scコマンドを使用してアンインストール時にサービスを停止/削除することができたと思います。

+0

さらにテストが行​​われます。私はそれがexeと何か「奇妙な」ものかもしれないと思う。私は同じインストールを簡単なテストexeでサービスをセットアップしている場合、それはうまくインストールし、アンインストールします。 私はexeについて何が奇妙であるかわからない。 idを書いた開発者と話をしなければならない。 – Ambro

答えて

2

インストーラをアンインストールしてもコンポーネントがアンインストールされても、サービスコマンドは発生しません。ログには、何もしていないと言われています。

これは、コンポーネントルールを破棄したり、インストーラの外部でアプリケーションを処理したり、コンポーネント/ファイルの参照カウントを混乱させたりするような場合に発生します。

たとえば、foo.exeが存在し、MSIがfoo.exeをインストールした場合、アンインストール時に残されます。したがって、それに関連するサービスも同様です。

+0

Hm。私はあなたに非常に有効なポイントがあると思う。 私は彼らが間違っていたはずのものを見つけるのを助ける方法を見たいと思っています。私は、サービスを無効にしてインストールして、exeファイルが以前にun-cleanでアンインストールされていないことを確認しました。結果は若干異なります。 EXEは削除されましたが、サービスはまだ残っていました。ログに「コンポーネント:cmpService;インストール済み:ローカル:リクエスト:不在:アクション:Null」と表示されました – Ambro

+0

サービスをアンインストールしないようにする方法はわかりませんが、どのように私はコンポーネントのルールを台無しにするかについての他の考えや例? exeの必要なDLLを同じコンポーネントに入れておくべきですか? – Ambro

+0

もっと知るにはログを見なければならないでしょう。 1つの質問ですが、どうやってテストしていますか?既知の状態にロールバックするスナップショットを持つクリーンな仮想マシン、または以前の開発ではおそらく汚れている物理マシンでは? –

関連する問題