O serviço do Windows não pode acessar arquivos na rede doméstica 'Windows XP Home'

4

Observação: Eu consegui duplicar meu problema usando outros computadores WinXp em vez de uma unidade USB conectada ao meu roteador. Mesmo problema exato. Portanto, a conclusão é que posso acessar (e modificar) os arquivos na rede, se estiver fazendo isso manualmente, mas meu serviço do Windows falha ao tentar fazer a mesma coisa. Se eu executar o programa através do Visual Studio, ele funciona. Se eu executar o mesmo código exato de um serviço do Windows, ele falhará.

Eu criei um serviço do Windows que precisa acessar um local de rede comum. Para testá-lo em casa, liguei uma unidade USB no meu roteador Netgear N600 WNDR3400. As configurações de armazenamento USB mostram o nome do grupo de trabalho como grupo de trabalho e o caminho do arquivo é:

\readyshare\USB_Storage

O serviço não pode acessar os arquivos dentro dessa pasta de rede. Recebo um erro informando que o arquivo não pode ser encontrado ou que a permissão foi negada, dependendo do que eu tentei. (O arquivo de fato existe.) No entanto, eu posso acessar / modificar esses arquivos diretamente do meu laptop (Win8), e eu posso fazer a mesma coisa no laptop da minha esposa (WinXP). O serviço está sendo executado como o usuário Local System .

Eu tentei executar como Network Service , como .\administrator e como .\JaneDoe . Sem sorte.

Eu também tentei alterar as permissões nas pastas newtwork, mas não funciona. Por exemplo, se eu tentar dar Everyone controle total:

Apenasreverteparaoestadoanteriordepoisqueeuclicoemaplicar:

Eu também tentei adicionar um novo usuário (veja o botão Adicionar acima), mas eu recebo este erro:

Algumaidéiadecomopossofazerissofuncionar?Eusimplesmentequeroquemeuserviçotenhaacessodeleitura/gravação(mesmoquecompleto,nãomeimporto)àspastasdessarede.

Editar-useioProcessMonitore,comoesperado,esteéoerro:

Mais tentativas falhadas

  • Use uma unidade USB diferente
  • Desativar o firewall do Windows na caixa do XP
  • Em vez de usar o caminho UNC, use uma unidade mapeada

EDIT - Código para acessar os arquivos de rede Nota: O arquivo não foi encontrado (apesar de existir).

private UpdaterManifest GetUpdaterManifest()
{
    string filePathAndName = Path.Combine(this._sourceBinaryPath, this._appName + ".UpdaterManifest");

    if (!File.Exists(filePathAndName))
    {
        // Always hit here
    }
}
    
por Bob Horn 16.02.2013 / 16:42

1 resposta

1

Você quer acessar um compartilhamento em uma máquina XP Home pela rede, onde o cliente está sendo executado como um serviço no Windows XP Home ou no Windows 8?!

Há vários aspectos envolvidos nisso e você precisa ter todos deles certos. Supondo que seu serviço seja executado como SYSTEM (também conhecido como LocalSystem ), você precisará garantir o seguinte:

  1. o próprio compartilhamento precisa ter as permissões corretas ( Everyone precisa do conjunto de ACLs apropriado) - esse é um ponto de problema no Windows XP Home, pois ele não possui o editor de segurança (por outro lado isso significa que em circunstâncias normais você não conseguirá mexer com as permissões e os padrões podem funcionar) ... parece haver uma ferramenta específica do XP Home para atribuir permissões de compartilhamento . Você pode executá-lo como shrpubw (presumivelmente para "compartilhar ... assistente"?). Veja este link .
  2. a pasta que você compartilha também precisa das permissões apropriadas para Everyone . - você pode fazer isso com cacls na linha de comando
  3. o mais importante em minha experiência é definir a política do computador corretamente. Infelizmente, é exatamente nesse ponto que você fica preso no XP Home, porque a MS intencionalmente enfraqueceu os recursos dessa edição do Windows.
    • Uma configuração de diretiva afetando isso seria "Acesso à rede: compartilhamentos que podem ser acessados anonimamente" - que, eu acho que você pode definir manualmente no registro, manipulando HKLM\System\CurrentControlSet\Services\LanmanServer\Parameters value NullSessionShares ( REG_MULTI_SZ ) ... é um valor composto de vários valores. Em regedit aparecerá como várias linhas. Uma linha adiciona o nome do compartilhamento. Ou seja se sua parcela for \readyshare\USB_Storage do cliente, o nome do compartilhamento será USB_Storage . Depois disso, execute net stop lanmanserver seguido por net start lanmanserver (esse serviço é chamado Server em Gerenciamento do Computador / MMC) ...
    • Outra política afetada é "Acesso à rede: permitir que todas as pessoas se inscrevam em usuários anônimos" - este não tenho 100% de certeza, mas acho que se correlaciona com a configuração em HKLM\SYSTEM\CurrentControlSet\Control\LSA value RestrictAnonymous ( REG_DWORD , consulte este artigo da base de conhecimento ) que precisa ter o valor 0 (mas o padrão é 1 ). Não tenho certeza se você pode evitar a reinicialização com essa configuração.

E mais uma coisa, é bem possível que outro ingrediente esteja faltando. Mas isso funciona para um software que eu executei em algum momento que requer que isso seja configurado para o mecanismo de atualização na LAN funcionar.

Graças às instalações de bate-papo, descobrimos isso de forma interativa. Usar shrpubw (mencionado em uma edição no primeiro ponto acima) foi o seguinte.

No menu inicial, escolha "Executar"

... insira shrpubw e pressione ENTER.

Prossigaimediatamenteparaopróximopassonoassistente

...pulandoisso:

Aponte para a pasta apropriada para compartilhar e nomear o compartilhamento

Assim:

...econtinuecom"Próximo"

Selecione "Personalizado" para as permissões na próxima etapa

Aqui:

...depoisdeclicarnobotão"Personalizar", você verá isto:

...agora,certifique-sedeajustaraspermissõesconformenecessário.Aentidade"Todos" é geralmente o que você deseja ajustar. No XP Home deve implicar "ANONYMOUS LOGON", que é afetado pelas configurações apontadas na primeira parte desta resposta (ponto 3).

Salve as permissões e vá para a próxima etapa.

Termine o assistente

... assim:

...oucomecenovamenteparaadicionaroutrocompartilhamentomarcandoacaixadeseleçãoantesdeclicarnobotão.

OBSERVAÇÃO:émuitoprovávelqueasconfiguraçõesdepolíticamencionadasacimatambémoafetem(ponto3).Portanto,estaetapaprovavelmenteaindaénecessáriano"servidor" (que é a máquina que fornece o compartilhamento).

    
por 20.02.2013 / 04:42