2008-09-26 5 views
7

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

+0

Esto debería funcionar. ¿Cuál es la excepción que estás recibiendo? –

Respuesta

6

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

Todos los procesos se ejecutan en el contexto de una cuenta de usuario que ha iniciado sesión en . Si desea abrir un archivo en otra computadora, su aplicación debe ejecutarse en el contexto de un usuario que tenga permisos para abrir archivos en esa máquina. Puede hacer esto con suplantación.

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

+1

Este es también el mejor enfoque, ya que eliminará la necesidad de lidiar con la autenticación en su software (que es fácil equivocarse). – Luke

0

¿Está buscando una forma de configurar al usuario actual en tiempo de ejecución?

Si no es así, siempre y cuando el usuario que ejecuta el proceso tiene acceso a esas máquinas, esto va a funcionar para usted:

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

FileInfo[] files = di.GetFiles(); 

foreach (FileInfo f in files) 
{ 
    Debug.WriteLine(f.Name); 
} 
2

para autenticar con una cuota a la que el usuario que ejecuta el proceso no tiene permiso (que es a menudo el caso de las acciones administrativas), 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 en realidad 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 donde una aplicación del usuario final necesita acceder a los datos en un recurso compartido al que la usuaria no debería tener acceso directo.