Search code examples
serviceelevated-privileges

Start a windows service without elevation


I have a windows service "Service1" configured to log on as "Local Service".

I built a console application to start it programmatically.

        var service = new ServiceController("Service1");
        service.Start();

I know that if I run the ConsoleApplication1 from an administrator command prompt it starts smoothly.

And if I run it without elevation I get an:

System error 5 has occurred.

Access is denied.

But, I need to start it without elevation.

Is it possible, or I have to change the way to achieve this?


Solution

  • I followed torak link and I understand this key difference concerning rights in a service:

    • a service has rights concerning the "Run as" user
    • a service has different permission to control the service (i.e. to start/stop it)

    So, to start the service I need to modify the service control permission.

    Well, I have done a windows service called Service1 and I made an installer with WIX. During setup I call ServiceInstall

          <ServiceInstall Id="ServiceInstaller" Type="ownProcess" Vital="yes"
           Name="Service1" DisplayName="Service1"
           Description="Service1 description"Start="demand"
           Account="NT AUTHORITY\LocalService"
           ErrorControl="ignore" Interactive="no" >
          </ServiceInstall>
    

    Then I have a client program called TestProgram where I try to start the service:

    var service = new ServiceController("Service1");
    service.Start();
    

    And obviously it doesn't start the service without elevation of TestProgram (that runs under a normal user account).

    So the solution is to instruct WIX to allow members of the user group (for example) to start/stop the service, using the PermissionEx tag:

    <util:PermissionEx User="Users" ServiceStart="yes" ServiceStop="yes">
    </util:PermissionEx>
    

    Hope this helps. Thank you all.