2012-01-30 10 views
2

Windowsサービスをインストールし、サービスが使用するDLLを追加するMSIを作成しています。これらのDLLは、インストーラを使用して追加または削除できる機能です。WiX - インストールされた製品の変更後にサービスを再起動する

ユーザーがインストールした製品を変更した後(新しい機能を追加するなど)、Windowsサービスを再起動する必要があります。サービスを再起動するカスタムアクションを呼び出す以外に、WiX 3.5でこれを行うもっとエレガントな方法がありますか?

これは私がサービスを開始する方法です。

<ServiceControl Id="StartService" Name="MyService" Start="install" Stop="both" Remove="uninstall" Wait="yes" /> 

EDIT: ここでは完全なコンポーネントのコードです。 idsを無視してください。

<Component Id="MyService" Guid="GUID"> 
    <File Id="MyService" 
     Source="$(var.BuildDestination)/$(var.NameSpacePrefix).MyService.exe" 
     KeyPath="yes" 
     > 
</File> 
<RemoveFile Id='AppConfigFile' On='uninstall' Name='MyService.exe.Config' /> 
<User xmlns="http://schemas.microsoft.com/wix/UtilExtension" 
     Id="ServiceAccount" 
     CreateUser="no" 
     FailIfExists="no" 
     RemoveOnUninstall="no" 
     UpdateIfExists="yes" 
     Disabled="no" 
     LogonAsService="yes" 
     Name="[ACCOUNT]" 
     Password="[PASSWORD]" /> 
<ServiceInstall 
      Id="MyService" 
      Type="ownProcess" 
      Vital="yes" 
      Name="MyService" 
      DisplayName="MyService" 
      Description="MyService" 
      Start="auto" 
      Account="[ACCOUNT]" 
      Password="[PASSWORD]" 
      ErrorControl="ignore" 
      Interactive="no"> 
</ServiceInstall> 
<ServiceControl Id="StartService" 
       Name="MyService" 
       Start="install" 
       Stop="both" 
       Remove="both" 
       Wait="yes" 
       > 
</ServiceControl> 

答えて

2

サービス機能(サービスをインストールし、起動する機能)の状態が更新されなかったように、サービス自体は「wasn停止して開始した。 私はServiceControlを別の機能であるすべてのコンポーネントに追加することでこの問題を解決しました。

<Component Id="Modules1" Guid="GUID"> 
<File Id="Modules.1" Source="$(var.BuildDestination)/$(var.NameSpacePrefix)Modules.1.dll" KeyPath="yes"> 
</File> 
<ServiceControl Id="StartService1" 
       Name="MyService" 
       Start="install" 
       Stop="both" 
       Wait="yes" 
       > 
</ServiceControl> 

1

このソリューションは、私の作品:

<Component Directory="APPLICATIONFOLDER"> 
    <File   Source  ="MyService.exe" 
        KeyPath  ="yes" /> 
    <ServiceInstall Id   ="MyService.exe" 
        Name  ="My Service" 
        Account  ="LocalSystem" 
        Start  ="auto" 
        ErrorControl="normal" 
        Interactive ="no" 
        Type  ="ownProcess" 
        Description ="My service does stuff."/> 
    <ServiceControl Id   ="MyService.exe" 
        Name  ="My Service" 
        Start  ="install" 
        Stop  ="both" 
        Remove  ="both" 
        Wait  ="no"/> 
</Component> 
+0

残念ながら、それは私のためのトリックを行いません。元の投稿に完全なコンポーネントコードを追加しました。 – MrBob

+0

Windowsのログ、アプリケーションのイベントビューアには何が表示されますか?ソースはMsiInstallerまたはMyServiceを停止していますか? –

+0

'ErrorControl'を' 'normal ''や '' critical "'に変更するとどうなりますか?これはより多くの情報を提供するかもしれない。 –

関連する問題