Em qual diretório um serviço do Windows é executado?

Eu criei um serviço do Windows .NET muito simples e instalei-o usando o utilitário InstallUtil.exe.

No serviço eu tenho um pedaço de código como tal:

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

Eu criei um arquivo chamado test_file.txt no mesmo diretório que o serviço, mas a parte comentada do código nunca está sendo executada …?

Os serviços são iniciados a partir de um aplicativo chamado Service Control Manager. Esta aplicação reside no diretório do sistema % WinDir% \ System32

Em um Windows 7 Ultimate – 64 bits, este caminho é: % WinDir% \ SysWOW64

Para mais informações, consulte Service Control Manager no MSDN .

Obrigado Harper Shelby por apontar problema com o post original.

 System.Diagnostics.Trace.WriteLine(Directory.GetCurrentDirectory()); 

irá produzir o diretório atual. Coloque esse código no método de boot do seu serviço e use uma ferramenta como o DebugView para verificar a saída. Então você saberá a pasta de boot do seu serviço.

Essa técnica simples será útil com muitos problemas no desenvolvimento de serviços, especialmente para depurar a boot do serviço.

Você provavelmente esperava que a pasta de trabalho do seu serviço fosse a pasta em que o executável do serviço está (assim como eu). Você pode mudar para essa pasta usando as seguintes linhas de código:

 System.IO.Directory.SetCurrentDirectory(System.AppDomain.CurrentDomain.BaseDirectory); 

Você pode fazê-lo funcionar assim:

 string cwd = Path.GetDirectoryName(Environment.GetCommandLineArgs()[0]); Directory.SetCurrentDirectory(cwd ?? "."); 

Queria também saber em qual pasta um serviço do Windows estava rodando, mas o código fonte não era meu, portanto, não poderia modificá-lo. Digitando no prompt de comando sc qc exibe a pasta em BINARY_PATH_NAME.

 C:\>sc qc DESCRIPTION: Queries the configuration information for a service. USAGE: sc  qc [service name]  

quando consulta MyService obter:

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