Как создать службу с файлом .bat на Windows 2008 Server?

21

Я создал сервис, используя

sc create myService binpath=myservice.bat

Но когда я запускаю его, происходит сбой со следующим сообщением об ошибке:

[SC] StartService FAILED 1053:
    The service did not respond to the start or control request in a timely fashion.

На Win2k3 я использовал srvany.exe из Resource Kit, но для Win2k8 нет набора ресурсов. Пока я установил srvany.exe на мою машину, но я не думаю, что это лучший способ сделать это.

Благодарность!

abyx
источник
1
Вы можете запустить командный файл в качестве службы? Разве запланированное задание не будет лучше? Я знаю, что если вы используете реальную службу Windows, событие OnLoad должно вернуться в течение нескольких секунд.
Цилб

Ответы:

9

Конечно, вы не можете запустить такой сервис. Вы пробовали использовать srvany в server 2008? Насколько я знаю, «официальной» версии srvany для s2k8 не существует, но вы всегда можете попробовать, не так ли?

РЕДАКТИРОВАТЬ: О, я забыл! Мы также используем FireDaemon для запуска не сервисных приложений в качестве сервисов. Тем не менее, это не бесплатно, и его функциональность слишком велика для ваших нужд.

shylent
источник
Что я и написал.
Абикс
хм .. это странно Это просто просочилось сквозь мой мозг. Сожалею. В любом случае, srvany кажется лучшим решением в этой ситуации.
Shylent
srvany работает в 2008 году (я использую его для установки и запуска Winamp.exe в качестве службы на домашнем сервере) ... но вы не можете запустить только файл bat.
Оскар Дюверборн
24

Используйте NSSM для запуска .BAT или любого старого .EXE-файла в качестве службы. Это почти замена SRVANY и приложение без излишеств.

http://iain.cx/src/nssm/

У меня была такая же проблема, как и у вас, и NSSM была единственной утилитой, которая работала.

Мэтью Блэкфорд
источник
3
Я не слышал об этом раньше, но, похоже, это ценный инструмент. Спасибо за совет.
Skyhawk
Спасибо, это сработало для меня. Хотя я все еще ищу варианты, чтобы остановить службу в указанное время.
Ankit
8

Мы используем Task Scheduler для запуска задач при каждом запуске компьютера (независимо от того, вошел пользователь в систему или нет)

Korayem
источник
1
чтобы скрыть окно, прочитайте это или это, если вы недовольны работой в качестве системы
JonnyRaa
7

Вы не можете просто запустить файл .BAT или любой старый файл .EXE в качестве службы. Службы Windows не работают, что вы. Вы можете использовать утилиту, такую как non-Sucking Service Manager (NSSM) или несвободную утилиту SRVANY от Microsoft, для запуска произвольной программы в качестве службы, но вы можете обнаружить, что не получаете «изящного» поведения при остановке.

Эван Андерсон
источник
3

Команда SC просто добавляет необходимые записи реестра для службы - если указанный вами файл не является допустимым exe-файлом службы, он не превратит его в один.

метелка
источник
2

От: этот пост на форумах Technet: http://social.technet.microsoft.com/Forums/en-US/winserverMigration/thread/98a97aee-c62b-4683-94ab-3777899cf7de/

Вот что нужно сделать ...

На момент публикации этой статьи не было средств Windows Server 2008 Resource Kit, поэтому получите «srvany.exe» из «Windows Server 2003 Resource Kit Tools» и скопируйте его в подходящее место на вашем сервере Win2008 (например, C: \ Windows \ System32 \). Используйте «sc», чтобы создать новый сервис, который запускает «srvany» (например, sc create MyService binPath = C: \ Windows \ System32 \ srvany.exe DisplayName = «My Custom Service») Использование RegEdit: создайте ключ «Parameters» для вашего служба (например, HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ MyService \ Paramaters \) Используя RegEdit: в только что созданном ключе «Parameters» создайте строковое значение с именем «Application» и введите полный путь к приложению, которое вы хотите запустить как сервис. (Цитаты не требуются.)

И это должно сделать это.

Примечание: некоторые приложения хранят свои настройки в кусте пользователя, а не в HKEY_LOCAL_MACHINE, поэтому вам нужно будет запустить приложение для его настройки, а затем настроить службу для запуска от имени этого пользователя.

user1977194
источник
2

попробуй это ... у меня сработало ..

sc create ServiceTest binpath= "C:\Windows\System32\cmd.exe /C C:\ServiceTest\Jenkins-Slave.bat"
Кушал Ганган
источник
У меня это тоже не сработало! Та же ошибка, что и у OP - Не запускается своевременно.
Равиндра HV
То же самое - не сработало.
Spedge
0

Я наткнулся на эту вещь. Вот инструмент под названием Bat_To_Exe_Converter. Конвертировать любые файлы .bat в файлы .exe очень просто. Попытайся. Сначала загрузите загрузчик, и он автоматически загрузит Bat_To_Exe_Converter. Это действительно помогло мне создать сервис, который запускает мой .bat файл через .exe. http://download.cnet.com/Bat-To-Exe-Converter/3001-2069_4-10555897.html?spi=eae5ab48292cc101b5f0ec370cf99ad0

Илья
источник
Добро пожаловать в сбой сервера! Хотя это может теоретически ответить на вопрос, было бы предпочтительным включить здесь основные части ответа и предоставить ссылку для справки.
Скотт Пак
0

Я нашел два других варианта, которые не позволят вам достать свой кошелек.

Вы можете scзапустить, srvanyкоторый затем указывает на вашу программу. (есть сообщение на форуме, на которое я не могу дать ссылку, потому что мне не хватает представителя здесь, хотя я делаю это на StackOverflow - ворчать)

Вот шаги, которые использовал оригинальный плакат:

  1. Используйте scдля создания новой службы, которая запускается srvany(например sc create MyService binPath=C:\Windows\System32\srvany.exe DisplayName="My Custom Service")
  2. Использование RegEdit: создайте Parametersключ для вашего сервиса (например HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MyService\Parameters\)
  3. Используя RegEdit: в только что созданном Parametersключе создайте строковое значение с именем Applicationи введите полный путь к приложению, которое вы хотите запустить как сервис. (Цитаты не требуются.)

Если это кажется чем-то вроде взлома , вы можете создать службу .NET для запуска вашего процесса. Если вы хотите пропустить несколько шагов, вот служба с открытым исходным кодом .NET, которая может запускать общие процессы:

http://www.codeproject.com/KB/system/xyntservice.aspx

Настройте его на свои нужды, но он сделает большую часть того, что вы хотите из коробки.

databyte
источник
И упоминается ли srvany из Win2k3, у которого нет поддерживаемой версии для Win2k8?
LarsH