Pergunta

Então, eu tenho um # pequeno aplicativo C que precisa verificar periodicamente o conteúdo de diretórios em várias máquinas na rede. Eu pensei que eu poderia apenas ler \ hostname \ C $, como um caminho de diretório, mas com a classe habitual Diretório não parece ser uma forma de autenticar contra os outros servidores para que você possa acessar o compartilhamento oculto. Eu tenho certeza que há uma maneira fácil de fazer isso que eu tenha esquecido, mas no momento estou um pouco stumpted.

Foi útil?

Solução

A partir http://bytes.com/forum/thread689145.html :

Todos os processos executados no contexto de um logado conta de usuário. Se você quiser abrir um arquivo em outro computador, o seu pedido deve ser executado em segundo contexto de um utilizador que tem as permissões para abrir arquivos nessa máquina. Você pode fazer isso com a representação.

A maneira mais fácil parece ser a de dar ao usuário atual direitos apropriados nas outras máquinas.

Outras dicas

Para autenticar com uma quota a que o usuário que executa o processo não tem permissão (que é frequentemente o caso para as ações administrativas), tente executar o comando net use:

net use SERVERNAME\IPC$ /user:USERNAME PASSWORD

Tente executar isso em um processo separado antes do código que realmente tenta acessar o compartilhamento, por exemplo:.

ProcessStartInfo psi = new ProcessStartInfo(
    "net", "use " + SERVERNAME + @"\IPC$ /user:" + USERNAME + " " + PASSWORD);
Process p = new Process();
p.StartInfo = psi;
p.Start();
p.WaitForExit();
p.Close();
// The code to access the share follows...

Isto é útil se não é apropriado para dar permissão para o compartilhamento para a conta de usuário que executa o processo, por exemplo, para um modelo de segurança em que um usuário final necessidades de aplicação para acessar dados em um compartilhamento ao qual o próprio usuário não deveria ter acesso directo.

Você está procurando uma maneira de definir o usuário atual em tempo de execução?

Se não, contanto que o usuário que executa o processo tem acesso a essas máquinas, isso vai funcionar para você:

DirectoryInfo di = new DirectoryInfo(@"\\machineName\c$\temp");

FileInfo[] files = di.GetFiles();

foreach (FileInfo f in files)
{
    Debug.WriteLine(f.Name);
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top