Як запустити послугу з певними параметрами запуску в Windows


18

Як запустити послугу з певними параметрами? В іншому питанні я знайшов

net start servicename bla

але якщо я спробую це, netкидає на мене синтаксичну помилку.

Що я роблю неправильно?

Редагувати: Для уточненняnet start servicenameпрацює просто чудово, але мені потрібно передати параметри до сервісу. Я можу це зробити вручнуservices.msc, заповнивши початковий параметр перед початком послуги. Але як я можу це зробити зі сценарію?

Ще одна редакція: Вибачте, але моє запитання було вводити в оману . У своїх тестах у мене було набагато більше параметрів, і це не/blah net startскарги. Насправді все , що починається з косої риски, - це добре . Такnet start servicename /blahпрацює,net start servicename blahне працює. Оскільки мені це потрібноnet start servicename /foo bar, саме вbarцьому і полягає проблема.

Відповіді:


29
sc start fooservice arg1 arg2 ...

Я поняття не маю, як мені тоді вдалося пропустити вашу відповідь, але я, звичайно, дуже радий, що знайшов її зараз (випадково). Це працює як шарм - навіть із параметрами, які не починаються /. Дуже дякую!
sbi

Це 2018 рік, і ні "sc start ...", ні "net start ...", схоже, не працює в Windows 10. Редагування реєстру працює serverfault.com/questions/507561/…
MarcH

8

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

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

Дійсно, кращий спосіб - зберігати конфігурацію десь, про яку знає служба, наприклад, реєстр або файлова система, і читати всі необхідні вам значення. Як бачите, налаштування командного рядка трохи болючіше, ніж має бути.

Якщо це випадково послуга, розроблена .NET, ви можете створити n копій виконуваного файлу у вашій файловій системі і кожен автоматично отримувати параметри з відповідного файлу app.config.

Це здається, що ви, можливо, зайшли занадто далеко за межі вікна Win32. Оскільки це звучить як розробка на замовлення, будь-яке з інших пропонованих рішень, хоча, можливо, не є вашим ідеалом, буде працювати правильно і є більш безпечним шляхом.


Тьфу. Служба бере файл конфігурації. Він або використовує ім'я файлу за замовчуванням, або ім'я, яке передається йому. Оскільки мені потрібні два різні екземпляри служби, мені потрібно вказати на різні файли конфігурації. Зв'язок з реєстром здається дуже некрасивим злом. Невже немає іншого способу, крім цього (та GUI)?
sbi

Гою, дивіться моє відредаговане запитання. net start дійсно приймає параметри, але тільки ті , які починаються з /.
sbi

Goyuix, я зараз користуюся sc.exe. Дивіться відповідь grawity (яку мені якось тоді вдалося пропустити).
sbi

4

Під час використання потрібен косої риски перед кожним параметром net start. Також обов’язково зазначайте параметри, у яких є пробіли.

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

Подивіться ще раз на мою проблему. У мене є параметри, які (повинні) починатись також з косою рисою. Як я тоді передавав би це?
sbi

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

3

net start servicename /foo за єдиний аргумент

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

Примітка . Цьому питанню 8 років, але я не маю репутації коментувати прийняту відповідь, і це все ще найкращий результат google в 2018 році, тому я хотів уточнити, що працює зараз щодо остаточного редагування питань.


Примітка. Я дав вам підсумок, тож тепер ваша відповідь знаходиться на 4-й позиції, і ви отримали певний удар. Повеселіться тут! :-)
sbi

1

Потрібно використовувати власне ім’я служби, як воно відображається на панелі керування, службах. Якщо він містить пробіли, потрібно поставити лапки навколо назви служби.

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


Роберте, це моя служба, яку я встановлюю і потім запускаю в сценарії. Я net start "my-service-name"просто чудово. Саме це net start "my-service-name" /blahдає мені повідомлення про помилку. Я також спробував, net start "my-service-name" -blahі це теж є синтаксичною помилкою.
sbi

0

Чи можуть InstSrv та SrvAny допомогти у цьому? Посібник та посилання


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