Pregunta

Este fragmento funciona bien si intento escribir en un directorio de usuarios, pero tan pronto como intento escribir en Archivos de programa, simplemente se ejecuta en silencio y el archivo no se ha copiado (sin excepción). Si trato de copiar el archivo en C: \ o en C: \ Windows, encuentro una excepción de acceso no autorizado.

¿Conoce otra forma de obtener los permisos para escribir en ese directorio o hacer que funcione de otra manera?

Cualquier ayuda muy apreciada! Gracias

using(FileStream fs=File.Open(source, FileMode.Open)){ }  
try  
{  
    FileIOPermission fp = new FileIOPermission(FileIOPermissionAccess.Write,   
                          AccessControlActions.Change, "C:\\Program Files\\MyPath");  
    fp.Demand();  //<-- no exception but file is not copied
    File.Copy("C:\\Users\\teebot\\Documents\\File.xml","C:\\Program Files\\MyPath\\File.xml",true);  
}  
catch(SecurityExceptions)  
{  
    throw(s);  
} 
catch(UnauthorizedAccessException unauthroizedException)
{
    throw unauthroizedException;
}
¿Fue útil?

Solución

Si está ejecutando en Vista, entonces el sistema simplemente redirige las escrituras a la carpeta de archivos del programa, esto se hace para que el programa antiguo que mantiene su configuración en el directorio del programa continúe funcionando cuando el usuario no es un administrador (o UAC es habilitado).

Todo lo que tiene que hacer es agregar un manifiesto a su programa que especifique el nivel de acceso requerido, luego el sistema asume que su programa es compatible con Vista y desactiva todos esos parches de compatibilidad.

Puede ver un ejemplo de un archivo de manifiesto en mi blog en:

http://www.nbdtech.com/blog/archive/2008/06/16/The-Application-Manifest-Needed-for-XP-and-Vista-Style-File.aspx

(el objetivo de la publicación es obtener la versión correcta de los controles comunes, pero las declaraciones de seguridad de Vista también están ahí)

Otros consejos

No escriba en la carpeta Archivos de programa.

Es un gran no-no, y especialmente causará problemas cuando llegue el día en que su código se ejecute en Vista o en una máquina en una compañía donde los usuarios solo obtienen seguridad estándar en lugar de derechos de administrador. Utilice la carpeta de datos de la aplicación en su lugar.

¿Estás ejecutando en Vista? Si es así, es posible que se encuentre con la virtualización del sistema de archivos. Esta es una característica en las versiones de 32 bits de Vista que permite a un usuario normal escribir en partes protegidas del sistema de archivos. Es una cuña introducida para reducir el dolor de las características LUA de Vista.

La versión corta es que el sistema operativo creará un sistema de archivos virtual para ciertas raíces protegidas (como los archivos de programa). Cuando un no administrador intenta escribir en él, se creará una copia editada en lugar del original. Cuando su cuenta de usuario intente mirar el archivo, verá la edición. Otras cuentas de usuario solo verán el original.

Versión más larga: http: // thelazyadmin.com/blogs/thelazyadmin/archive/2007/04/26/file-system-virtualization.aspx

La seguridad de acceso al código otorga o niega permisos a su código . No se puede usar para anular los permisos otorgados / denegados al usuario actual.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top