O diretório tem um serviço do Windows executado em?

votos
58

Eu criei um simples serviço .NET Windows e instalou-lo 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 como o serviço, mas a parte comentada do código nunca é ser executado ...?

Publicado 19/05/2009 em 21:53
fonte usuário
Em outras línguas...                            


4 respostas

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

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

Esta técnica simples será útil com muitos problemas no desenvolvimento de serviços, especialmente a inicialização do serviço de depuração.

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

System.IO.Directory.SetCurrentDirectory(System.AppDomain.CurrentDomain.BaseDirectory);
Respondeu 19/05/2009 em 22:19
fonte usuário

votos
55

Serviços são iniciados a partir de um aplicativo chamado Service Control Manager. Esta aplicação vive no diretório do sistema % windir% \ system32

Em um Windows 7 Ultimate - 64 bits este caminho é realmente: % windir% \ SysWOW64

Para mais informações consulte Serviço de Gerente de Controle da MSDN .

Graças Harper Shelby por apontar problema com pós orginal.

Respondeu 19/05/2009 em 21:59
fonte usuário

votos
11

Você pode fazê-lo funcionar assim:

string cwd = Path.GetDirectoryName(Environment.GetCommandLineArgs()[0]);
Directory.SetCurrentDirectory(cwd ?? ".");
Respondeu 16/01/2013 em 00:41
fonte usuário

votos
2

Queria também saber em que pasta um serviço do Windows estava funcionando, mas o código fonte não era meu, então não poderia modificá-lo. Digitando em Prompt de comando sc qc <service name>exibe a pasta na BINARY_PATH_NAME.

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

quando a consulta MyService get:

C:> MyService sc qc

[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
Respondeu 30/11/2015 em 12:54
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more