Srvany.exe
is an ancient program and it will work, to my best knowledge, till Windows 2003. You can just forget it existed for Windows 7/10.
To start/stop a service on Windows 7/10 (I'm using Acronis service) with the service name which is usually quite different from the display name:
Stopping running service:
sc stop syncagentsrv
SERVICE_NAME: syncagentsrv
TYPE : 10 WIN32_OWN_PROCESS
STATE : 3 STOP_PENDING
(STOPPABLE, NOT_PAUSABLE, ACCEPTS_PRESHUTDOWN)
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x0
Starting running service:
sc start syncagentsrv
SERVICE_NAME: syncagentsrv
TYPE : 10 WIN32_OWN_PROCESS
STATE : 2 START_PENDING
(STOPPABLE, NOT_PAUSABLE, ACCEPTS_PRESHUTDOWN)
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x0
PID : 2240
FLAGS :
Check the statek of the service:
sc query syncagentsrv
SERVICE_NAME: syncagentsrv
TYPE : 10 WIN32_OWN_PROCESS
STATE : 4 RUNNING
(STOPPABLE, NOT_PAUSABLE, ACCEPTS_PRESHUTDOWN)
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x0
To create the service you want to:
sc create "MyService" binPath="C:\Program Files (x86)\MyProg\myprog.exe" start=auto DisplayName="My Service"
This only creates the service and adds record into the Registry/serviceDB. You need to check the exe file itself.
You don't need obj=LocalSystem as this is default option. Don't create spaces between the equal sign =
and the values!
Did you check event viewer? What does it say when you start the service? Only the timeout? Does the myprog.exe
work alone without being a service? Please answer these questions and I'll edit the answer.
Edit 1 & 2 based on comments and should you have any difficulties with the above approach
There is a small utility called SrvStart (originally from Nick Rozanski), but it has been now adapted for VS 2017 (get srvstart.v120.zip
which needs to be build). If you are happy with the older version and already provided exe files download the srvstart_run.v110.zip
and copy both *.exe files and *.dll into the directory as indicated below.
Copy all the files into C:\Windows (yes, your Windows directory). The reason being that the C:\Windows should be always in your PATH
thus reachable by the SrvStart executable.
Now create a MyProg.ini file:
[MyService]
startup="C:\Program Files (x86)\MyProg\myprog.exe"
shutdown_method=winmessage
winmessage
forces to close any opened windows when you are shutting down the service.
Then place the *.ini
file directly into your root c:\
.
Then use a command:
sc create <servicename> Displayname= "<servicename>" binpath= "srvstart.exe <servicename> -c <path to srvstart config file>" start= <starttype>
In your case it would be:
sc create "MyService" DisplayName="My Service" binPath="srvstart.exe MyService -c C:myprog.ini" start=auto
Note: There is no backslash (\
) between C:
and myprog.ini
which is correct.
Now check your services and you should see the "My Service" name there and it should behave like a service.
Edit 3 based on comments from @CodenameK
Apparently you need to compile the SrvStart 120 version with that is compilable with VS2017 to make it run correctly @Win10. The only version available is the old 1.1 version, which appears not to work correctly at Win10.
The solution that worked for CodenameK was to use NSSM - the Non-Sucking Service Manager. For future reference if anyone needs it.