Я создал очень простую службу .NET для Windows и установил ее с помощью утилиты InstallUtil.exe.
В сервисе у меня есть кусок кода как таковой:
if (File.Exists("test_file.txt"))
{
// Do something clever
}
Я создал файл под названием test_file.txt в том же каталоге, что и служба, но закомментированная часть кода никогда не выполняется ...?
.net
windows-services
Парень
источник
источник
Ответы:
Службы запускаются из приложения под названием Service Control Manager. Это приложение находится в системном каталоге % WinDir% \ System32
В Windows 7 Ultimate - 64 бит этот путь на самом деле: % WinDir% \ SysWOW64
Для получения дополнительной информации см. Service Control Manager на MSDN .
Спасибо Харперу Шелби за указание на проблему с оригинальным постом.
источник
%WinDir%\SysWOW64
вместо этогоSystem.Diagnostics.Trace.WriteLine(Directory.GetCurrentDirectory());
выведет текущий каталог. Поместите этот код в метод запуска вашей службы и используйте такой инструмент, как DebugView, для проверки вывода. Тогда вы узнаете папку автозагрузки вашего сервиса.
Этот простой метод будет полезен для решения многих проблем при разработке сервиса, особенно для отладки запуска сервиса.
Вы, вероятно, ожидали, что рабочая папка вашей службы будет папкой, в которой находится исполняемый файл службы (я тоже). Вы можете перейти в эту папку, используя следующие строки кода:
System.IO.Directory.SetCurrentDirectory(System.AppDomain.CurrentDomain.BaseDirectory);
источник
Вы можете заставить его работать так:
string cwd = Path.GetDirectoryName(Environment.GetCommandLineArgs()[0]); Directory.SetCurrentDirectory(cwd ?? ".");
источник
Хотел также знать, в какой папке запущена служба 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
источник
sc qc apache2.4
отображается...BINARY_PATH_NAME : "E:\root\Public Cache\Apache Httpd\httpd-2.4.20-x86-vc11\Apache24\bin\httpd.exe" -k runservice
, но вместо этого%WinDir%\System32
Из службы запуска SC в папке / Start in: / : простая альтернатива - использовать nssm.cc - это дает вам возможность указать каталог для запуска.
источник