Pregunta

Entonces, tengo una pequeña aplicación C # que necesita verificar periódicamente el contenido de los directorios en varias máquinas en la red. Pensé que podía leer \ hostname \ C $ como una ruta de directorio, pero con la clase de directorio normal no parece haber una manera de autenticarse en los otros servidores para que pueda acceder al recurso compartido oculto. Estoy seguro de que hay una manera fácil de hacer esto que he pasado por alto, pero en este momento estoy un poco perplejo.

¿Fue útil?

Solución

De http://bytes.com/forum/thread689145.html :

  

Todos los procesos se ejecutan en el contexto de un   cuenta de usuario iniciada sesión. Si quieres   abrir un archivo en otra computadora, su   la aplicación debe estar ejecutándose en el   contexto de un usuario que tiene permisos   para abrir archivos en esa máquina. Usted puede   hacer esto con suplantación.

La forma más fácil parece ser otorgar al usuario actual los derechos apropiados en las otras máquinas.

Otros consejos

Para autenticarse con un recurso compartido para el que el usuario que ejecuta el proceso no tiene permiso (que suele ser el caso de los recursos compartidos administrativos), intente ejecutar el comando net use:

net use SERVERNAME\IPC$ /user:USERNAME PASSWORD

Intente ejecutar esto en un proceso separado antes del código que realmente intenta acceder al recurso compartido, por ejemplo:

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

Esto es útil si no es apropiado dar permiso al recurso compartido para la cuenta de usuario que ejecuta el proceso, p. para un modelo de seguridad en el que una aplicación de usuario final necesita acceder a datos en un recurso compartido al que el usuario no debería tener acceso directo.

¿Está buscando una manera de configurar el usuario actual en tiempo de ejecución?

Si no, siempre que el usuario que ejecuta el proceso tenga acceso a esas máquinas, esto funcionará para usted:

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

FileInfo[] files = di.GetFiles();

foreach (FileInfo f in files)
{
    Debug.WriteLine(f.Name);
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top