Permissão negada para o serviço na conta de administrador local

5

Eu tenho um serviço que deve copiar alguns arquivos em uma rede, o serviço está sendo executado em uma das contas de administrador local.

Conectado como administrador, posso copiar manualmente os arquivos da rede para uma pasta específica em Program Files , mas o serviço existe com uma exceção PermissionDenied para WRITE o arquivo. Eu também tenho certeza que os arquivos não estão sendo bloqueados antes da escrita.

O erro é o seguinte:

Access to the path ".../SomeAssembly.dll" is denied.

Por que o serviço está me causando um erro e como posso corrigi-lo? (Eu também desenvolvi o serviço, então mudanças na montagem podem estar na mesa).


Atualizar

Eu também tentei executá-lo em System , mas ele não pode ler os arquivos na rede (não sei por que) as contas LocalService e NetworkService AFAIK não têm privilégios suficientes para fazer alterações em ProgramFiles. eles fazem?


Atualização 2

O motivo pelo qual não posso usar System é porque essa conta não tem acesso a recursos de rede por design, o mesmo acontece com NETWORK SERVICE que não tem acesso a recursos locais. O problema com a conta do administrador parece ser que o Windows está bloqueando a operação de cópia de arquivos quando é executada pelo serviço.

Alguma ideia ????

    
por PedroC88 26.08.2011 / 17:21

3 respostas

1

Bem, primeiro eu verificaria se algum dos arquivos está marcado como "Somente leitura", já que vi esse atributo às vezes substituir as permissões NTFS. Eu vi casos em que você pode copiar o arquivo na GUI, depois de clicar em Sim para um prompt "Você tem certeza?", Mas qualquer tentativa de usar um programa para gravar dados para ele falhará imediatamente, nenhum prompt dado. / p>

Além disso, certifique-se de que o serviço e os serviços relacionados estejam sendo executados na conta que você acredita que eles sejam. Já vi alguns casos em que um serviço A chamará o serviço B para executar alguma tarefa e, em seguida, entregará os resultados de volta ao Serviço A para concluir a tarefa. E se apenas o Service An estiver usando a conta com as devidas permissões, a tentativa falhará (pois, mesmo que An esteja chamando B, ela não o força a executar como o mesmo usuário que An está usando, portanto, se B não estiver configurado para use o usuário adequado, ele usará o padrão que pode não ter acesso ao ponto específico que você deseja)

Além disso, se possível, verifique se o caminho que está sendo usado como um caminho como c:\program files\SomeAssembly.dll\somefile.txt ou algo parecido com C:/users/don/app/SomeAssembly.dll também pode gerar erros.

    
por 26.12.2011 / 20:08
0

No final, fiz o aplicativo copiar os arquivos do recurso remoto para uma pasta de baixa restrição ( Application Data , se bem me lembro) e, em seguida, invocar o serviço, executando em System , para copiá-los para Program Files .

A vantagem dessa abordagem é que ela não precisa de direitos administrativos para copiar os arquivos pela rede para a unidade local (contanto que você tenha as permissões read corretas nos arquivos de rede, é claro) e, em seguida, também aproveita as baixas restrições impostas a System para gravar em Arquivos de Programas.

    
por 27.12.2011 / 03:02
-1

Dependendo do que o outro computador está executando, os serviços geralmente são executados na conta dos Serviços de Rede ou na conta de Sistemas Locais.

Eu tentaria isso primeiro.

    
por 26.08.2011 / 19:06