c# - Establecer permisos de escritura para todos los usuarios para mi carpeta de programa
.net permissions (3)
¿No te está perdiendo la afirmación de que realmente estableces el control de acceso en el directorio?
Directory.SetAccessControl(Directory.GetCurrentDirectory(), ds);
Tengo construir un programa en Visual Studio. El programa crea un archivo de registro y escribe en él mientras se ejecuta el programa. Por lo tanto, construí un instalador (setup-project), que debería establecer permisos de escritura para mi carpeta de programa independientemente de qué usuario trabaje con el programa. actualmente se ve así:
// ...
}
InitializeComponent();
string folder = Directory.GetCurrentDirectory();
DirectorySecurity ds = Directory.GetAccessControl(folder);
ds.AddAccessRule(new FileSystemAccessRule("Everyone", //Everyone is important
//because rights for all users!
FileSystemRights.Read | FileSystemRights.Write, AccessControlType.Allow));
}
// ...
En las dos últimas filas obtengo una System.SystemException
: "Die Vertrauensstellung zwischen der primären Domäne und der vertrauenswürdigen Domäne konnte nicht hergestellt werden".
[Traducción: "No se pudo establecer la relación de confianza entre el dominio principal y el dominio confiable".]
La stacktrace se lee así:
bei System.Security.Principal.NTAccount.TranslateToSids(IdentityReferenceCollection sourceAccounts, Boolean& someFailed)
bei System.Security.Principal.NTAccount.Translate(IdentityReferenceCollection sourceAccounts, Type targetType, Boolean& someFailed)
bei System.Security.Principal.NTAccount.Translate(IdentityReferenceCollection sourceAccounts, Type targetType, Boolean forceSuccess)
bei System.Security.Principal.NTAccount.Translate(Type targetType)
bei System.Security.AccessControl.CommonObjectSecurity.ModifyAccess(AccessControlModification modification, AccessRule rule, Boolean& modified)
bei System.Security.AccessControl.CommonObjectSecurity.AddAccessRule(AccessRule rule)
bei System.Security.AccessControl.FileSystemSecurity.AddAccessRule(FileSystemAccessRule rule)
¿Tienes una idea de lo que puedo hacer? Gracias
Esta pregunta previamente hecha debe apuntarle en la dirección correcta. Básicamente, NO quieres que ningún usuario escriba en la carpeta Program Files
. UAC, seguridad y otras medidas están ahí para tratar de prevenir esto tanto como sea posible.
Básicamente, si desea un único archivo que todos los usuarios escriban, lo deseará en la carpeta ProgramData
, accesible a través de %ALLUSERSPROFILE%
, en lugar de la carpeta temporal de los usuarios individuales, que es definitivamente lo que desea hacer con un archivo de registro. Recuerde que el contenido de la carpeta temporal debe considerarse volátil y podría eliminarse en cualquier momento, como por ejemplo el Asistente de limpieza de disco.
Tal vez la mejor respuesta no es lo que ha pedido. Hay una buena razón para no escribir en el directorio de archivos del programa. Los datos de registro en particular son transitorios y no deberían escribirse aquí.
Es una idea mucho mejor escribir datos de registro en el directorio especificado por la variable de entorno TEMP. Si hace esto, le ahorrará a sus usuarios algunos problemas y evitará que maldigan su software en el futuro. Por favor revisa esta respuesta que cubre el mismo tema:
Permitir permiso de acceso para escribir en Archivos de programa de Windows 7