В каком каталоге работает служба Windows? - PullRequest
69 голосов
/ 20 мая 2009

Я создал очень простой .NET Windows Service и установил его с помощью утилиты InstallUtil.exe.

В сервисе у меня есть кусок кода как таковой:

if (File.Exists("test_file.txt"))
{
   // Do something clever
}

Я создал файл с именем test_file.txt в том же каталоге, что и служба, но закомментированная часть кода никогда не выполняется ...?

Ответы [ 4 ]

92 голосов
/ 20 мая 2009
System.Diagnostics.Trace.WriteLine(Directory.GetCurrentDirectory());

выведет текущий каталог. Поместите этот код в метод запуска вашей службы и используйте инструмент типа DebugView , чтобы проверить вывод. Тогда вы будете знать папку запуска вашего сервиса.

Этот простой метод будет полезен при многих проблемах в разработке сервисов, особенно при отладке запуска сервиса.

Вы, вероятно, ожидали, что рабочая папка вашего сервиса будет папкой, в которой находится исполняемый файл сервиса (я тоже) Вы можете перейти в эту папку, используя следующие строки кода:

System.IO.Directory.SetCurrentDirectory(System.AppDomain.CurrentDomain.BaseDirectory);
67 голосов
/ 20 мая 2009

Сервисы запускаются из приложения под названием Service Control Manager. Это приложение находится в системном каталоге % WinDir% \ System32

В Windows 7 Ultimate - 64 бита этот путь на самом деле: % WinDir% \ SysWOW64

Для получения дополнительной информации см. Диспетчер управления службами в MSDN .

Спасибо Харперу Шелби за указание на проблему с оригинальным сообщением.

11 голосов
/ 16 января 2013

Вы можете заставить его работать так:

string cwd = Path.GetDirectoryName(Environment.GetCommandLineArgs()[0]);
Directory.SetCurrentDirectory(cwd ?? ".");
1 голос
/ 30 ноября 2015

Хотел также узнать, в какой папке запущена служба 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...