1

This is my .wxs file

Particularly I managed to install a service as a LocalSystem user, and started it:

        <!-- Directory where [prey]/versions/[version] will be -->
    <Directory Id="ProgramFilesFolder">
      <Directory Id="INSTALLLOCATION" Name="Prey">
        <Directory Id="VersionsDir" Name="versions">
          <Directory Id="VersionDir" Name="$(var.ProductVersion)">
            <Directory Id="BinDir" Name="bin">
              <Directory Id="BinWindowsDir" Name="windows">
                <Component Id="CronServiceExe"
                           Guid="ECC25B2A-FB2E-425A-92AD-DCF1D34204FF">
                  <File Id="file_8FF048AD40124B9F9C07126F2C14A765"
                        Checksum="yes"
                        KeyPath="yes"
                        Source="source-msi\versions\0.10.0\bin\windows\cronsvc.exe" />
                  <ServiceInstall Id="CronServiceInstaller"
                                  Type="ownProcess"
                                  Vital="yes"
                                  Name="CronService"
                                  DisplayName="Cron Service"
                                  Start="auto"
                                  Account="LocalSystem"
                                  ErrorControl="normal"
                                  Interactive="no">
                  </ServiceInstall>
                  <ServiceControl Id="StartService"
                                  Start="install"
                                  Stop="both"
                                  Remove="uninstall"
                                  Name="CronService"
                                  Wait="yes" />
                </Component>
                <Component Id="CronServiceDll"
                           Guid="75C4129B-C28A-45A8-9F06-CB496259FE7F">
                  <File Id="file_11D016207EA34826A20A52524A3A82BC"
                        Checksum="yes"
                        KeyPath="yes"
                        Source="source-msi\versions\0.10.0\bin\windows\Cronsvclib.dll" />
                </Component>
              </Directory>
            </Directory>
          </Directory>
        </Directory>
      </Directory>
    </Directory>

And it runs fine. Everything is OK, except when I get to uninstall the product. Because despite being asked in an UAC dialog I get (Screenshot), the installer insist that I don't have permissions to stop the service.

Here is the screenshot of the Error, which says:

Service 'Cron Service' (CronService) could not be stopped. Verify that you have sufficient privileges to stop system services.

And, here is the specific logs (I'm uninstalling with /L*v option to get verbose logs). You can get the full file in this gist.

Lines 2220 - 2226

MSI (s) (90:80) [19:11:54:953]: Note: 1: 2205 2:  3: Icon 
MSI (s) (90:80) [19:11:54:953]: Note: 1: 2205 2:  3: TypeLib 
MSI (s) (90:80) [19:11:54:953]: Note: 1: 2727 2:  
MSI (s) (90:80) [19:11:54:973]: RESTART MANAGER: Detected that the service CronService will be stopped due to a service control action authored in the package before the files are updated. So, we will not attempt to stop this service using Restart Manager
MSI (s) (90:80) [19:11:54:973]: Note: 1: 2727 2:  
MSI (s) (90:80) [19:11:54:973]: Doing action: InstallInitialize
MSI (s) (90:80) [19:11:54:973]: Note: 1: 2205 2:  3: ActionText 
Action ended 19:11:54: InstallValidate. Return value 1.

Lines 4624 - 4635

MSI (s) (90:80) [19:11:57:196]: Executing op: ActionStart(Name=StopServices,Description=Stopping services,Template=Service: [1])
MSI (s) (90:80) [19:11:57:196]: Executing op: ProgressTotal(Total=1,Type=1,ByteEquivalent=1300000)
MSI (s) (90:80) [19:11:57:196]: Executing op: ServiceControl(,Name=CronService,Action=2,Wait=1,)
MSI (s) (90:80) [19:12:27:239]: Note: 1: 2205 2:  3: Error 
MSI (s) (90:80) [19:12:27:239]: Note: 1: 2228 2:  3: Error 4: SELECT `Message` FROM `Error` WHERE `Error` = 1921 
MSI (s) (90:80) [19:16:38:940]: Note: 1: 2205 2:  3: Error 
MSI (s) (90:80) [19:16:38:940]: Note: 1: 2228 2:  3: Error 4: SELECT `Message` FROM `Error` WHERE `Error` = 1709 
MSI (s) (90:80) [19:16:38:940]: Product: Prey Anti-theft -- Error 1921. Service 'Cron Service' (CronService) could not be stopped.  Verify that you have sufficient privileges to stop system services.
MSI (s) (90:80) [19:17:08:983]: Note: 1: 2205 2:  3: Error 
MSI (s) (90:80) [19:17:08:983]: Note: 1: 2228 2:  3: Error 4: SELECT `Message` FROM `Error` WHERE `Error` = 1921 
MSI (c) (48:84) [19:12:27:239]: Font created.  Charset: Req=0, Ret=0, Font: Req=MS Shell Dlg, Ret=MS Shell Dlg

Given all that information. I infere that somewhere I have to manage to start my MSI as an administrator. Or not?

That's my problem:

  1. Is there a way to set up my .msi installer as an "admin only" one? (If that choice does exist).

  2. The weird thing is that all posts and google results I'm getting are about problems INSTALLING and STARTING the service, rather than STOPPING it. So I'm in a dead end.

Please, all help will be very useful and appreciated.

Yan Sklyarenko
  • 31,557
  • 24
  • 104
  • 139
Herman Junge
  • 2,759
  • 24
  • 20

1 Answers1

3

The error message includes the suggestion that it's a permissions problem. That's rarely the case, since installing services requires elevated permissions to begin with. Failure to stop a service is usually as simple as the service not responding to the stop request quickly enough. Does CronService implement the service interface to respond to stop requests? Neither MSI nor Windows will kill a service process to stop it.

Bob Arnson
  • 21,377
  • 2
  • 40
  • 47
  • Hi Bob. Is there a way to issue a `taskkill` using burn? I tried to did this using a custom action inside the _MSI_, but, as you know, you can't run elevated privileges actions before `InstallInitialize`. – Herman Junge Jul 08 '13 at 14:45
  • 1
    You can use CloseApplication from WixUtilExtension to kill the process. – Bob Arnson Jul 08 '13 at 15:05
  • Unfortunately It did not work. But I'm working on using another _MSI_ just to kill that process, and using a Burn generated _EXE_ to chain those two. You Bob gave me the idea, actually here -> http://windows-installer-xml-wix-toolset.687559.n2.nabble.com/Burn-running-sql-script-batch-command-script-in-chain-td7578607.html . I will report of my success or failure in here :) – Herman Junge Jul 08 '13 at 17:00
  • Bob. Sorry to bother you. But, how do you create an "Add/remove programs icon for the Bundle alone, but not for the products? I'm having trouble with the bundle as-if. And if I use my-bundle.exe and press `Uninstall` I get that my _MSI_ icons dissapear, but don't get uninstalled. – Herman Junge Jul 08 '13 at 22:26
  • 1
    That's the default: MsiPackage/@Visible="no" – Bob Arnson Jul 09 '13 at 03:53