Maneira correta de acessar um compartilhamento de rede em um serviço do Windows

1

Eu tenho um serviço do Windows que requer acesso sob demanda a um compartilhamento CIFS remoto. Sempre que precisar acessar o compartilhamento, ele primeiro tenta "montá-lo" com as credenciais fornecidas,

NET USE \host\share password /USER:user

usa o conteúdo do compartilhamento e, em seguida, remove o compartilhamento.

NET USE \host\share /DELETE

Atualmente, o serviço funciona somente na primeira vez em que o compartilhamento é usado. Em tentativas subsequentes, não funciona e recebo o seguinte erro:

NET failed with exit code 2

No entanto, essa mesma lógica funciona perfeitamente quando executada manualmente a partir da linha de comando; só falha no contexto do serviço.

Minha pergunta é: existe uma maneira melhor e mais correta de lidar com compartilhamentos de rede em um serviço do Windows? De acordo com este artigo , NET USE não é recomendado para uso em serviços, mesmo sem o uso de letras de unidade. Existe alguma alternativa para NET USE eu deveria estar usando, ou o serviço só precisa ser executado como um usuário diferente do padrão LocalSystem user?

Idealmente, o compartilhamento deve ser acessível apenas quando necessário diretamente; Por isso, gostaria de manter a lógica em que o compartilhamento é excluído sempre que possível.

    
por TipsyTopsy 31.10.2017 / 22:07

1 resposta

3

Você deve estar executando o serviço como uma conta de usuário específica e essa conta de usuário deve ter permissões para acessar o compartilhamento.

Colocar um nome de usuário e senha assim é uma maneira muito ruim de trabalhar. Não só por segurança, mas também por portabilidade e gerenciamento.

    
por 31.10.2017 / 22:26