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

4

Nota: Consegui duplicar meu problema usando outros computadores WinXp em vez de uma unidade USB conectada ao meu roteador. Mesmo problema exato. Portanto, o ponto principal é que eu posso acessar (e modificar) os arquivos pela rede se estiver fazendo isso manualmente, mas meu serviço do Windows falha ao tentar fazer a mesma coisa. Se eu executar o programa pelo Visual Studio, ele funcionará. Se eu executar o mesmo código exato que 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, conectei uma unidade USB ao 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 nessa pasta de rede. Eu recebo um erro dizendo que o arquivo não pode ser encontrado ou que a permissão foi negada, dependendo do que eu tento. (O arquivo realmente existe.) No entanto, eu posso acessar / modificar esses arquivos diretamente do meu laptop (Win8), e posso fazer a mesma coisa no laptop da minha esposa (WinXP). O serviço está sendo executado como Local Systemusuário.

Eu tentei correr como Network Service, como .\administratore como .\JaneDoe. Sem sorte

Também tentei alterar as permissões nas pastas newtwork, mas elas não permanecem. Por exemplo, se eu tentar dar Everyonecontrole total:

insira a descrição da imagem aqui

Ele apenas retorna ao estado anterior depois que eu clico em Apply:

insira a descrição da imagem aqui

Também tentei adicionar um novo usuário (consulte o botão Adicionar acima), mas recebo este erro:

insira a descrição da imagem aqui

Alguma idéia de como posso fazer isso funcionar? Eu simplesmente quero que meu serviço tenha acesso de leitura / gravação (mesmo que completo, não me importo) às pastas nesta rede.

Editar - usei o Process Monitor e, como esperado, este é o erro:

insira a descrição da imagem aqui

Mais tentativas com falha

  • Use uma unidade USB diferente
  • Desativar o firewall do Windows na caixa 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 (mesmo que exista).

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

    if (!File.Exists(filePathAndName))
    {
        // Always hit here
    }
}
Bob Horn
fonte
Você pode postar o código usado para acessar o arquivo?
Supun
Tente também os seguintes links: link ou link
Supun
@Supun Eu tentei muitas coisas, incluindo itens nos links que você forneceu. Nada funcionou até agora. Também postei meu código no final da minha pergunta.
Bob Horn
Casa. Está no novo título. :)
Bob Horn
Bastante ambíguo. Pode ser um "Windows XP" ... aguarde ... "Rede doméstica" ou "Windows XP Home" "Rede" ... entende? Além disso, isso significa que não sei a resposta (ou pelo menos não tenho certeza). Eu o conheceria pelo Pro.
0xC0000022L

Respostas:

1

Então, você deseja 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 acertar todos eles. Supondo que seu serviço seja executado como SYSTEM(aka LocalSystem), você deverá garantir o seguinte:

  1. o compartilhamento em si precisa ter as permissões corretas ( Everyoneprecisa das ACLs apropriadas definidas) - esse é um ponto problemático no Windows XP Home, pois não possui o editor de segurança (por outro lado, isso significa que, em circunstâncias normais, você nem conseguirá para mexer com as permissões em primeiro lugar 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 Everyone. - você pode fazer isso com caclsna linha de comando
  3. o mais importante na 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 paralisa os recursos dessa edição do Windows.
    • Uma configuração de diretiva que afeta isso seria "Acesso à rede: compartilhamentos que podem ser acessados ​​anonimamente" - que, acredito, você pode definir manualmente no registro manipulando HKLM\System\CurrentControlSet\Services\LanmanServer\Parametersvalue NullSessionShares( REG_MULTI_SZ) ... é um valor composto por vários valores. No regeditele aparecerá como várias linhas. Uma linha adiciona o nome do compartilhamento. Ou seja, se o seu compartilhamento for \\readyshare\USB_Storagedo cliente, o nome do compartilhamento será USB_Storage. Após a execução, net stop lanmanserverseguida por net start lanmanserver(este serviço é chamado Serverem Gerenciamento do Computador / MMC) ...
    • Outra política que o afeta é "Acesso à rede: Permita que todos se apliquem a usuários anônimos" - este não tenho 100% de certeza, mas acho que ele se correlaciona com a configuração de HKLM\SYSTEM\CurrentControlSet\Control\LSAvalor RestrictAnonymous( REG_DWORDconsulte este artigo da KB ) que precisa ter o valor 0(mas o padrão é 1). Não sei 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 exige que isso seja definido para que o mecanismo de atualização na LAN funcione.


Graças às facilidades de bate-papo, descobrimos de maneira interativa. O uso shrpubw(mencionado em uma edição do primeiro ponto acima) fez o truque da seguinte maneira.

No menu Iniciar, escolha "Executar"

... entre shrpubwe pressione ENTER.

Executar caixa de diálogo

Prossiga imediatamente para a próxima etapa do assistente

... pulando isso:

Etapa 1 shrpubw

Aponte para a pasta apropriada para compartilhar e nomeie o compartilhamento

Como isso:

Passo 2

... e continue com "Avançar"

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

Aqui:

etapa 3

... depois de clicar no botão "Personalizado", você verá o seguinte:

Editor de segurança

... agora certifique-se de ajustar as permissões conforme necessário. A entidade "Todos" é geralmente o que você deseja ajustar. No XP Home, isso implica "LOGON ANÔNIMO", afetado pelas configurações apontadas na primeira parte desta resposta (ponto 3).

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

Conclua o assistente

... como isso:

Último passo

... ou comece novamente para adicionar outro compartilhamento marcando a caixa de seleção antes de clicar no botão.

NOTA: muito provavelmente as configurações de política mencionadas acima também afetam isso (ponto 3). Portanto, essa etapa provavelmente ainda é necessária no "servidor" (que é a máquina que fornece o compartilhamento).

0xC0000022L
fonte
+1 nas boas dicas e na ajuda via chat. Trabalhando com isso agora. Eu gostaria de poder lhe dar mais pontos do que um voto positivo (e possivelmente a resposta aceita). Obrigado.
Bob Horn