¿En qué directorio se ejecuta un servicio de Windows?

Creé un servicio .NET Windows muy simple y lo instalé usando la utilidad InstallUtil.exe.

En el servicio, tengo un fragmento de código como tal:

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

He creado un archivo llamado test_file.txt en el mismo directorio que el servicio pero la parte comentada del código nunca se está ejecutando …?

Los servicios se inician desde una aplicación llamada Service Control Manager. Esta aplicación vive en el directorio del sistema % WinDir% \ System32

En un Windows 7 Ultimate – 64 bits esta ruta es en realidad: % WinDir% \ SysWOW64

Para obtener más información, vea el Administrador de control de servicios en MSDN .

Gracias Harper Shelby por señalar el problema con la publicación original.

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

dará salida al directorio actual. Coloque ese código en el método de inicio de su servicio y use una herramienta como DebugView para verificar el resultado. Entonces sabrá la carpeta de inicio de su servicio.

Esta técnica simple será útil con muchos problemas en el desarrollo de servicios, especialmente para depurar el inicio del servicio.

Probablemente esperaba que la carpeta de trabajo de su servicio sea la carpeta donde está el ejecutable del servicio (yo también). Puede cambiar a esa carpeta usando las siguientes líneas de código:

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

Puedes hacer que funcione así:

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

También quería saber en qué carpeta se estaba ejecutando un servicio de Windows pero el código fuente no era mío, así que no pude modificarlo. Teclear el símbolo del sistema sc qc muestra la carpeta en BINARY_PATH_NAME.

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

cuando la consulta MyService obtiene:

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