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:

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

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

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:

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
}
}




