Как найти местоположение exe, которое работает как служба Windows во время выполнения?Как найти местоположение exe, которое работает как служба Windows во время выполнения?
ответ
.NET - Assembly.GetExecutingAssembly().Location
(другие предложили Application.ExecutablePath
, но это требует ссылки на System.Windows.Forms
, что служба обычно не нужно)
Native - GetModuleFileName(NULL, ...)
Если ваш исполняемый файл привязывается к конкретному порту можно разобрать выход из
netstat -ab
, вероятно, не самое привлекательное решение, хотя.
Если это .NET, вы хотите, чтобы Application.ExecutablePath (если вы пытаетесь получить собственный путь приложения к службе запуска Windows). Если вы пытаетесь найти путь к другому запущенному сервису Windows, это совсем другая история.
Обычно они работают под Windows \ system32, даже если вы, возможно, installled его на другом диске
программным или с помощью инструмента?
В последнем случае я рекомендую использовать Sysinternals Process Explorer: он показывает все запущенные процессы, включая службы, и одно из полей - это командная строка, используемая для запуска процесса, включая полный путь.
Их утилита командной строки, PsService, может быть полезна.
Используйте реестр:
например.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\' + ServiceDisplayName;
затем прочитайте ImagePath
значение.
Если вы не используете .NET, самым прямым способом является использование функции Win32 ::QueryServiceConfig(). Это даст вам имя пути, отображаемое имя и всякую другую информацию об услуге.
Для родного кода Windows: GetModuleFileName (NULL ...) в EXE (не в DLL, загруженной службой, например).
Не могли бы вы добавить более подробную информацию о том, что вы пытаетесь сделать. Вы спрашиваете, как исполняемый файл может программно определить его путь запуска? – RoadWarrior 2008-11-18 14:54:29
Кроме того, если вы хотите, чтобы это было сделано программно, какой язык программирования вы используете? – 2008-11-18 15:55:53