Estoy escribiendo un pequeño programa .NET en Windows 7. Una cosa que tiene que hacer es crear enlaces simbólicos, lo que parece requerir que tenga privilegios de administrador. También necesita poder trabajar con unidades de red mapeadas (por ejemplo, R: \, que en mi sistema se mapea a \\titanium\Private\
)..NET Directory.Exists niega existencia de unidad de red asignada cuando se ejecuta como administrador
Estoy usando Directory.Exists(path)
para verificar que exista una ruta.
Al ejecutar el programa como un usuario normal (cuenta de administrador, pero no como "administrador"), esto funciona bien en la unidad de red asignada.
Al ejecutar el programa como administrador (con UAC), no se encuentran los directorios que existen. Como resultado, el programa se niega a reconocer que R:\Steam Games\
es un directorio que realmente existe.
Estoy un poco desconcertado de por qué esto está sucediendo. El uso de la ruta UNC completa (\\titanium\Private\Steam Games\
) tampoco funciona.
¿Alguien ha topado con esto antes? ¿Hay alguna buena solución? ¿Tengo que formatear las rutas diferentes (nota: la mayoría de ellos están formateados actualmente con Path.Combine
, por lo que debería ser correcto).
Gracias por su ayuda.
(Como ejemplo, Directory.Exists(@"R:\Steam Games\")
devuelve falso cuando se ejecuta como administrador, pero esa carpeta existe. La llamada de función devuelve correctamente true cuando se ejecuta con regularidad).
Editar: El problema parece ser que un administrador es técnicamente una cuenta de usuario diferente. Ni siquiera podía usar rutas de acceso UNC, porque solo estaba conectado a mi servidor de archivos con mi usuario habitual, no bajo "Administrador". Como una solución alternativa (relativamente hackosa), simplemente ejecuto mi programa con privilegios regulares y luego uso Process.Start
para invocar una instancia de cmd.exe con los argumentos para crear un enlace simbólico (y el verbo "runas" para obtener el aviso de UAC).
Ha sido elegido como cerrado fuera del tema. El problema aquí es UAC (y que el usuario UAC no está en la misma sesión que el usuario no UAC), y no tiene nada que ver con la programación. – Lucero
Creo que esto es muy sobre el tema, como programador que necesita para estar lejos de los problemas que ocurren si un usuario final decide elevar su programa. –
Estoy de acuerdo con Scott. Es un problema de programación común y, en mi opinión, este es un gran sitio para él. –