Как запустить службу с определенными параметрами? В Другой вопрос я нашел
net start servicename blah
но если я попробую это, net
выдает мне синтаксическую ошибку.
Что я делаю не так?
Редактировать: Чтобы уточнить net start servicename
работает нормально, но мне нужно передать параметры службе. Я могу сделать это вручную в services.msc
заполнив параметр запуска перед запуском службы. Но как это сделать из сценария?
Другое редактирование: Извините, но мой вопрос был вводящий в заблуждение. В моих тестах у меня было намного больше параметров, и это не /blah
net start
жалуется на. По факту, все, что начинается с косой черты, нормально. Так net start servicename /blah
работает, net start servicename blah
не работает. Поскольку мне нужно net start servicename /foo bar
, это bar
это проблема.
sc start fooservice arg1 arg2 ...
NET START
не позволит вам передавать произвольные параметры, насколько я знаю (похоже, они должны иметь префикс /), я считаю, что правильный способ - изменить соответствующий ключ реестра и остановить / запустить службу. Предполагая, что ваша настраиваемая служба называется MyService:
[HKLM\SYSTEM\CurrentControlSet\Services\MyService]
"ImagePath":C:\Projects\MyService\bin\MyService.exe Parameter1 Parameter2
На самом деле, лучший способ - сохранить вашу конфигурацию в том месте, о котором служба знает, например, в реестре или файловой системе, и прочитать любые нужные вам значения. Как видите, настройка командной строки немного сложнее, чем должна быть.
Если это случайно разработанная служба .NET, вы можете создать п копии исполняемого файла в вашей файловой системе, и каждая из них автоматически получает параметры из соответствующего файла app.config.
Похоже, вы зашли слишком далеко за рамки Win32. Поскольку это звучит как индивидуальная разработка, любые другие предлагаемые решения, хотя, возможно, и не ваш идеал, будут работать правильно и будут более безопасным способом.
Вам нужна косая черта перед каждый параметр при использовании net start
. Также не забудьте указать в кавычках параметры, в которых есть пробелы.
net start servicename /param0 /"param1 with spaces" /"/param2_has_slash"
net start servicename /foo
для единственного аргумента
net start servicename /"foo bar"
для строки или списка аргументов
Заметка: Этому вопросу 8 лет, но у меня нет репутации, чтобы комментировать принятый ответ, и это по-прежнему лучший результат Google в 2018 году, поэтому я хотел уточнить, что сейчас работает в отношении окончательного редактирования вопросов.
Вам необходимо использовать фактическое имя службы, которое отображается в панели управления services. Если он содержит пробелы, вы должны заключить имя службы в кавычки.
Чтобы получить фактическое имя службы, просто введите net start
без каких-либо параметров в командной строке. Он должен дать вам список всех Бег services, чтобы вы могли получить фактическое название службы. Тогда просто используйте net start <servicename>
Могут ли в этом помочь InstSrv и SrvAny? Руководство и ссылки