Как получить аргументы командной строки службы Windows? - PullRequest
6 голосов
/ 31 мая 2011

Я ищу способ выяснить аргументы командной строки любой службы Windows.

Для не обслуживающего процесса можно найти аргументы командной строкив диспетчере задач Windows или программно с помощью WMI, как показано в в этом сообщении .

К сожалению, эти два решения не работают для службы Windows, которая запускается ServiceController.Start (String [] args) метод.Оба они показывают только путь к исполняемому файлу в командной строке, хотя некоторые аргументы были переданы.

  1. В чем разница между двумя сценариями (сервис или не сервисный процесс)?
  2. Есть ли способ выяснить аргументы службы Windows?

Я также пытался создать простой сервис, который просто регистрирует любые аргументы командной строки, которые у него есть, для событияжурнал.Я запустил его с помощью "sc.exe start <my service> <arg1>" и убедился, что в журнал событий записано <arg1>.

Однако ни одно из решений не помогло мне.Я до сих пор видел только путь к исполняемому файлу.Моя версия ОС - Windows Server 2008 R2 SP1 x64 Enterprise.

Ответы [ 4 ]

7 голосов
/ 04 июня 2011

Существует два типа аргументов для сервисов:

  • Аргументы, которые были переданы в командной строке запуска процесса. Вы можете легко добраться до них с помощью Process Explorer и т. Д.
  • Аргументы, которые были переданы функции ServiceMain . Это API-интерфейс WIndows, который должен реализовывать сервис. Эквивалентом .NET является ServiceBase.OnStart . Это то, что используется, когда вы делаете SC START \[arguments\]. Это не имеет ничего общего с «аргументами процесса командной строки».

Второй тип параметров, вероятно, известен только самой службе, если ее использует какая-либо реализация, что не подходит для многих служб. Я не думаю, что Windows следит за этим, когда мы смотрим на низкоуровневые структуры Windows, такие как PEB: Структуры процессов и потоков (MSDN), даже на недокументированные части, Недокументированные функции NTDLL .

4 голосов
/ 31 мая 2011

Вы можете найти подробности файла EXE-файла службы и отредактировать или просто просмотреть параметры командной строки в записи реестра для службы. Вы найдете это под

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services

Обязательно перезапустите окно Services , если вы решите изменить его, так как оно не перечитает его в реальном времени.

2 голосов
/ 31 мая 2011
  1. Сервисный процесс не запускается как обычный EXE-файл. Более того, сервисный процесс может быть просто DLL-файлом. См .: Служба Windows (Википедия).

    Многие из них отображаются в списке процессов в диспетчере задач Windows, чаще всего с именем пользователя SYSTEM, LOCAL SERVICE или NETWORK SERVICE, хотя не все процессы с именем пользователя SYSTEM являются службами. Остальные службы запускаются через svchost.exe как библиотеки DLL, загруженные в память.

  2. Просто переопределите метод ServiceBase.OnStart(string[] args). Узнать больше: Метод ServiceBase.OnStart (String []) (MSDN)

2 голосов
/ 31 мая 2011

Попробуйте приложение Process Explorer из Sysinternals

Это похоже на диспетчер задач, только в нем перечислены все запущенные процессы.Выберите сервис и посмотрите его свойства.

...