wix: re-start an existing Service when install/uni

2019-07-18 22:45发布

问题:

I would like to re-start a running service when my installer finish installing or uninstalling.
I have found this code:

<ServiceControl Id="SomeUniqueId" Name="NameOfTheirService"
            Start="both" Stop="both"/>

But where do i attach this code to ? to the component where my is placed ?

Code:

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="325c4bfd-6614-43e9-aedb-93661295352d" Name="Plugin" Language="1033" Version="1.0.0.0"
       Manufacturer="XXX Inc." UpgradeCode="4307526e-3902-40d0-991b-bacff9b3d71b">
<Package InstallerVersion="200" Compressed="yes" />
<Media Id="1" Cabinet="media1.cab" EmbedCab="yes" />
<Property Id="XXXXXX">
  <RegistrySearch Id="XXXXXX" Type="raw" 
                  Root="HKLM" Key="SOFTWARE\XXX\XXX" Name="InstallationPath" />

</Property>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="XXXXXX">
    <Component Id="ProductComponent" Guid="93118c45-f0c0-4c9e-9168-8ea905e9427c">
      <File Id="pluggin" Source="C://setup.log" KeyPath="yes" Checksum="yes"/>
      <ServiceControl Id="StartService" Name="servicename"
         Start="both" Stop="both"/>
    </Component>     
    </Directory>
    </Directory>
    <Feature Id="ProductFeature" Title="install" Level="1">
        <ComponentRef Id="ProductComponent" />
  <ComponentGroupRef Id="Product.Generated" />
    </Feature>
</Product>

回答1:

The ServiceControl element must be placed in a component that you install. From the WiX .chm:

Starts, stops, and removes services for parent Component. This element is used to control the state of a service installed by the MSI or MSM file by using the start, stop and remove attributes. For example, Start='install' Stop='both' Remove='uninstall' would mean: start the service on install, remove the service when the product is uninstalled, and stop the service both on install and uninstall.