Как запустить службу с определенными параметрами запуска в Windows


17

Как запустить сервис с определенными параметрами? В другом вопросе я нашел

net start имя_службы бла

но если я попробую это, netвыдает синтаксическую ошибку на меня.

Что я делаю неправильно?

Изменить: Чтобы уточнитьnet start servicenameработает просто отлично, но мне нужно передать параметры в сервис. Я могу сделать это вручнуюservices.msc, заполнив параметр start перед запуском сервиса. Но как я могу сделать это из сценария?

Другое редактирование: Извините, но мой вопрос вводил в заблуждение . В моих тестах у меня было намного больше параметров, и это не/blah net startжалобы. На самом деле, все , что начинается с косой черты, хорошо . Такnet start servicename /blahработает,net start servicename blahне работает. Так как мне нужноnet start servicename /foo bar, этоbarпроблема.

Ответы:


29
sc start fooservice arg1 arg2 ...

Я понятия не имею, как мне удалось пропустить ваш ответ тогда, но я, конечно, очень рад, что нашел его сейчас (случайно). Это работает как шарм - даже с параметрами, которые не начинаются с /. Большое спасибо!
2010 года

Сейчас 2018 год, и ни "sc start ...", ни "net start ..." не работают в Windows 10. Редактирование реестра работает serverfault.com/questions/507561/…
MarcH

8

NET STARTнасколько я знаю, я не позволю вам передавать произвольные параметры (похоже, они должны начинаться с префикса /), я считаю, что правильным способом является изменение соответствующего ключа реестра и остановка / запуск службы. Предполагая, что ваш пользовательский сервис называется MyService:

[HKLM\SYSTEM\CurrentControlSet\Services\MyService]
"ImagePath":C:\Projects\MyService\bin\MyService.exe Parameter1 Parameter2

На самом деле, лучший способ - хранить конфигурацию там, где знает служба, например, в реестре или файловой системе, и читать любые значения, которые вам нужны. Как видите, настройка командной строки немного сложнее, чем должна быть.

Если это случайно разработанная служба .NET, вы можете создать n копий исполняемого файла в вашей файловой системе, и каждая из них автоматически получит параметры из соответствующего файла app.config.

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


Тьфу. Служба принимает файл конфигурации. Он либо использует имя файла по умолчанию, либо имя, переданное ему. Поскольку мне нужны два разных экземпляра службы, я должен указать им разные файлы конфигурации. Необходимость возиться с реестром выглядит очень уродливо. Неужели нет другого пути, кроме этого (и GUI)?
2010 года

Goyuix, см. Мой отредактированный вопрос. net start действительно принимает параметры, но только те , которые начинаются с /.
2010 года

Goyuix, я сейчас использую sc.exe. См. Ответ Гравити (который мне как-то удалось пропустить тогда).
2010 года

4

Перед каждым параметром необходимо использовать косую черту net start. Также не забудьте указать параметры, которые имеют пробелы.

net start servicename /param0 /"param1 with spaces" /"/param2_has_slash"

Посмотри еще раз на мою проблему. У меня есть параметры, которые (должны) начинаться с косой черты тоже. Как бы я прошел эти тогда?
ВОО

Попробуйте это: net start servicename / "/ foo" / bar
Even Mien

3

net start servicename /foo для одного аргумента

net start servicename /"foo bar" для строки или списка аргументов

Примечание . Этому вопросу уже 8 лет, но у меня нет репутации, чтобы комментировать принятый ответ, и это по-прежнему лучший результат Google в 2018 году, поэтому я хотел уточнить, что сейчас работает в отношении окончательного редактирования вопросов.


Примечание: я дал вам голосование, так что теперь ваш ответ на 4-й позиции, и вы получили некоторое количество повторений. Веселись здесь! :-)
СБИ

1

Вам необходимо использовать фактическое название сервиса, как оно отображается на панели управления сервисами. Если он содержит пробелы, вы должны поставить кавычки вокруг имени службы.

Чтобы получить реальное имя сервиса, просто введите net startбез каких-либо параметров в командной строке. Он должен дать вам список всех запущенных сервисов, чтобы вы могли получить реальное имя сервиса. Тогда просто используйтеnet start <servicename>


Роберт, это мой сервис, который я устанавливаю, а затем запускаю в сценарии. У меня все net start "my-service-name"отлично. Это net start "my-service-name" /blahдает мне сообщение об ошибке. Я также пытался, net start "my-service-name" -blahи это тоже синтаксическая ошибка.
2010 г.

0

Могут ли InstSrv и SrvAny помочь в этом? Руководство и ссылки


Я кратко посмотрел на это, и я так не думаю. (Пожалуйста, исправьте меня, если я ошибаюсь.) У меня есть настоящий исполняемый файл службы, который работает нормально. Просто (для тестов) мне нужно установить и запустить его из скрипта, и мне нужно передать параметры в сервис.
2010 г.
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.