c# .net

c# - ¿Cómo puedo acceder a una unidad de red mapeada con System.IO.DirectoryInfo?



.net (7)

Necesito crear un directorio en una unidad de red mapeada. Estoy usando un código:

DirectoryInfo targetDirectory = new DirectoryInfo(path); if (targetDirectory != null) { targetDirectory.Create(); }

Si especifico la ruta como "//// ServerName // Directory", todo va bien. Si mapeo el "// ServerName / Directory" como, digamos unidad Z :, y especifique la ruta como "Z: //", falla.

Después de crear el objeto targetDirectory, VS muestra (en el modo de depuración) que targetDirectory.Exists = false, y al intentar hacer targetDirectory.Create () arroja una excepción:

System.IO.DirectoryNotFoundException: "Could not find a part of the path ''Z:/'."

Sin embargo, el mismo código funciona bien con directorios locales, por ejemplo, C :.

La aplicación es un servicio de Windows (WinXP Pro, SP2, .NET 2) que se ejecuta con la misma cuenta que el usuario que mapeó la unidad. Qwinsta responde que la sesión del usuario es la sesión 0, por lo que es la misma sesión que la del servicio.


¿Está mapeando con las mismas credenciales exactas con las que se ejecuta el programa?


La cuenta en la que se ejecuta su aplicación probablemente no tenga acceso a la unidad asignada. Si se trata de una aplicación web, ese sería definitivamente el problema ... Por defecto, una aplicación web se ejecuta bajo la cuenta SERVICIO DE RED, que no tendría ninguna configuración de unidades mapeadas. Intenta usar suplantación para ver si soluciona el problema. Aunque probablemente necesites encontrar una mejor solución, simplemente usa la suplantación. Si fuera yo, me limitaría a usar el camino UNC.


Las unidades de red mapeadas son específicas del usuario, por lo que si la aplicación se ejecuta con una identidad diferente a la del usuario que creó la letra de unidad asignada (z :), no funcionará.


Puede intentar usar WNetConnection para resolver la unidad mapeada a una ruta de red.


De acuerdo con el hecho, las letras de unidad asignadas no funcionan, la solución simple es escribir la ruta completa de la red.

Aka,

mi R:/ unidad se asignó a //myserver/files/myapp/

Entonces, en lugar de usar

"R:/" + "photos"

utilizar

"//myserver/files/myapp/" + "photos"


Tuve el mismo problema en Win Server 2012. El UAC de desactivación lo resolvió.


¿Estás corriendo en Vista / Server 2k8? Ambos aislan los servicios en la Sesión 0 y la primera sesión interactiva es la Sesión 1. Aquí hay más información sobre el aislamiento de la sesión. Por lo tanto, incluso si se usa el mismo usuario para el servicio y para el inicio de sesión interactivo, serán sesiones diferentes.