Srvany.exe
- древняя программа, и, насколько мне известно, она будет работать до Windows 2003. Вы можете просто забыть, что она существовала для Windows 7/10.
Чтобы запустить / остановить службу в Windows 7/10 (я использую службу acronis) с именем службы, которое обычно сильно отличается от отображаемого имени:
Остановка работающей службы:
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
Запуск службы:
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 :
Проверьте состояние услуги:
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
Для создания сервиса вы хотите:
sc create "MyService" binPath="C:\Program Files (x86)\MyProg\myprog.exe" start=auto DisplayName="My Service"
Это только создает службу и добавляет запись в реестр / serviceDB. Вам нужно проверить сам исполняемый файл.
Вам не нужно obj = LocalSystem , так как это опция по умолчанию. Не ставьте пробелы между знаком равенства =
и значениями!
Вы проверяли просмотрщик событий? Что это говорит, когда вы запускаете службу? Только тайм-аут? myprog.exe
работает один, не будучи сервисом? Пожалуйста, ответьте на эти вопросы, и я отредактирую ответ.
Edit1 / 2 на основе комментариев, и если у вас возникнут какие-либо трудности с вышеуказанным подходом
Существует небольшая утилита под названием SrvStart (родом из Ник Розански ), но теперь она адаптирована для VS 2017 (получить srvstart.v120.zip
, которую необходимо собрать). Если вы довольны старой версией и уже предоставленными exe-файлами, загрузите srvstart_run.v110.zip
и скопируйте оба файла * .exe и * .dll в каталог, как указано ниже.
Скопируйте все файлы в C: \ Windows (да, в каталог Windows). Причина в том, что C: \ Windows всегда должен быть в вашем PATH
, таким образом, доступным для исполняемого файла SrvStart.
Теперь создайте файл MyProg.ini:
[MyService]
startup = "C: \ Program Files (x86) \ MyProg \ myprog.exe"
shutdown_method = winmessage
winmessage
принудительно закрывает все открытые окна при закрытии службы.
Затем поместите файл *.ini
прямо в корень c:\
.
Затем используйте команду:
sc create <servicename> Displayname= "<servicename>" binpath= "srvstart.exe <servicename> -c <path to srvstart config file>" start= <starttype>
В вашем случае это будет:
sc create "MyService" DisplayName="My Service" binPath="srvstart.exe MyService -c C:myprog.ini" start=auto
Примечание: Нет обратной косой черты (\
) между C:
и myprog.ini
, что является правильным.
Теперь проверьте ваши службы, и вы должны увидеть там имя My Service, и оно должно вести себя как служба.
Редактировать 3 - на основе комментариев от @ CodenameK
По-видимому, вам нужно скомпилировать версию srvstart 120, которую можно скомпилировать с VS2017, чтобы она работала правильно @ Win10. Единственная доступная версия - это старая версия 1.1, которая на Win10 работает некорректно.
Решение, которое работало для CodenameK, состояло в том, чтобы использовать - NSSM - Менеджер неосасывающих услуг . Для дальнейшего использования, если это кому-нибудь нужно.