.net - studio - ¿En qué directorio se ejecuta un servicio de Windows?
windows service visual studio 2015 (4)
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.
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 ...?
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 <service name>
muestra la carpeta en BINARY_PATH_NAME.
C:/>sc qc
DESCRIPTION:
Queries the configuration information for a service.
USAGE:
sc <server> qc [service name] <bufferSize>
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
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);