Executável iniciado por um serviço de janelas usando a conta do sistema local compartilhamentos de rede não pode acessar

StackOverflow https://stackoverflow.com/questions/249928

Pergunta

Eu tenho um executável que é iniciado por um serviço do Windows, este programa será executado em uma máquina clientes e terá de conectar a um compartilhamento remoto para executar uma tarefa específica. Esta ação é especificado pelo cliente através de uma interface do usuário, de modo que não sabemos com antecedência o que significa que não pode ser "hard-coded", ou o compartilhamento mapeados com antecedência.

Anteriormente, necessário que o cliente possa fazer logon em sua máquina e execute o arquivo executável no log-on, mas nós sempre quis permitir que o nosso programa para ser executado dentro de um serviço e não exigem um log-in, principalmente para tornar mais fácil para o cliente e evitar qualquer log-outs acidentais fechando o nosso software. Então, isso também significa que não sabemos o que existe contas de usuário local em uma máquina de clientes, por isso temos de iniciar o serviço usando a conta do sistema local.

Temos agora, como mencionado acima, um serviço de wrapper para iniciar o executável e executar várias tarefas. Isso parece funcionar bem na maioria dos casos e acessa a fina rede subjacente -. O propósito de nosso software envolve principalmente pacotes capturando etc

No entanto, quando as tentativas de software para conectar a um Windows Share (nome UNC) não pode conectar. Enquanto que se o executável foi iniciado manualmente ele se conecta bem.

As sugestões que eu geralmente vistos para resolver este tipo de questões parecem todo o uso digamos uma conta de usuário como a conta do sistema pode compartilhamentos de rede não acesso, mas no nosso caso isso não seja possível. Existe alguma outra forma, poderíamos chegar a este trabalho?

Editar: Eu esqueci de mencionar que esta aplicação poderia (e mais comumente será) executado em Win2K não XP, e eu acho que estou certo em dizer que a conta de rede local não está disponível antes XP

Foi útil?

Solução

Se você pode mudar seu serviço de janelas de modo que ele seja executado sob a conta do serviço de rede, em seguida, o executável será capaz de compartilhamentos de rede de acesso (esta é uma das razões por que a conta Serviço de Rede foi criado).

contas

O sistema local e serviço local não tem nenhum credenciais de rede e, portanto, não pode ser autenticado na rede. Isso ocorre por design.

Editar:. IIRC, a conta de serviço de rede foi introduzido no Server 2003, e adicionado a um dos service packs XP

Se você não pode contar com o serviço de rede conta estar disponível, então você pode considerar a criação de uma conta de domínio dedicado, armazenar as credenciais da conta em algum lugar, lê-los de dentro do seu serviço, então loging e personificando o usuário antes de acessar a rede compartilhar. Alternativamente, o serviço de janelas poderia funcionar como a conta dedicada diretamente, caso em que seria necessário o "logon como um serviço" privilégio.

Outras dicas

Quando você tem um serviço que é executado sob NT AUTHORITY \ LOCALSYSTEM (que é o nome da conta de serviço), ele aparece como o DOMAINNAME \ COMPUTERNAME $ (note o sinal $) conta para o resto da rede. Ou seja, ela aparece como a conta do computador no Active Directory. Apenas conceder suas permissões de arquivos e compartilhar a DOMAINNAME \ computername $ e você deve ser bom.

Por que você não pode usar outra conta? Existe uma conta de serviço de rede embutido no Windows, especificamente para os serviços que o acesso à rede necessidade.

De qualquer forma, ter muito cuidado quando se tem um serviço de iniciar um exe.

Se o acesso de gravação para a pasta com o exe não está desativado, o usuário pode substituir o exe com (por exemplo) cmd.exe. A próxima vez que as tentativas de serviços para iniciar a sua exe, voilà: shell de comandos A com direitos de sistema

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top