В каком каталоге работает служба Windows?
Я создал очень простой .NET Windows Service и установил его с помощью утилиты InstallUtil.exe.
В сервисе у меня есть кусок кода как таковой:
if (File.Exists("test_file.txt"))
{
// Do something clever
}
Я создал файл test_file.txt в том же каталоге, что и служба, но прокомментированная часть кода никогда не выполняется...?
Ответы
Ответ 1
Службы запускаются из приложения, называемого Service Control Manager. Это приложение находится в системном каталоге % WinDir%\System32
В Windows 7 Ultimate - 64 бит этот путь на самом деле: % WinDir%\SysWOW64
Для получения дополнительной информации см. Service Control Manager в MSDN.
Спасибо Харпер Шелби за то, что он указал на проблему с оригинальной почтой.
Ответ 2
System.Diagnostics.Trace.WriteLine(Directory.GetCurrentDirectory());
выводит текущий каталог. Поместите этот код в метод запуска вашей службы и используйте инструмент, например DebugView, чтобы проверить вывод. Затем вы узнаете папку автозагрузки своей службы.
Этот простой метод будет полезен со многими проблемами в разработке сервисов, особенно для отладки запуска сервиса.
Вероятно, вы ожидали, что рабочая папка вашей службы будет папкой, в которой находится исполняемый файл службы (так же, как и я). Вы можете перейти в эту папку, используя следующие строки кода:
System.IO.Directory.SetCurrentDirectory(System.AppDomain.CurrentDomain.BaseDirectory);
Ответ 3
Вы можете заставить его работать так:
string cwd = Path.GetDirectoryName(Environment.GetCommandLineArgs()[0]);
Directory.SetCurrentDirectory(cwd ?? ".");
Ответ 4
Хотелось также узнать, в какой папке работает служба Windows, но исходный код не был моим, поэтому он не мог его изменить. Ввод в командной строке sc qc <service name>
отображает папку в BINARY_PATH_NAME.
C:\>sc qc
DESCRIPTION:
Queries the configuration information for a service.
USAGE:
sc <server> qc [service name] <bufferSize>
когда запрос MyService получает:
C: > sc qc MyService
[SC] QueryServiceConfig SUCCESS
SERVICE_NAME: MyService
TYPE : 10 WIN32_OWN_PROCESS
START_TYPE : 3 DEMAND_START
ERROR_CONTROL : 1 NORMAL
BINARY_PATH_NAME : "D:\Routines\MyService\MyService.exe"
LOAD_ORDER_GROUP :
TAG : 0
DISPLAY_NAME : MyService
DEPENDENCIES :
SERVICE_START_NAME : LocalSystem