2010-10-13 17 views
6

Tengo un programa de compilación 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 parece a esto:Establecer permisos de escritura para todos los usuarios para mi carpeta de programa

// ... 
} 
    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 consigo un System.SystemException: “Die Vertrauensstellung zwischen der primären Domäne und der vertrauenswürdigen Domäne konnte werden nicht hergestellt.”

[Traducción: "El relación de confianza entre el dominio principal y el dominio de confianza no se pudo establecer "]

el StackTrace dice 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

+4

¿Ejecutaste tu instalador con privilegios administrativos? – Dennis

+3

Tenga en cuenta que hay una razón para las diversas carpetas públicas en un sistema dado para almacenar datos de programas ... – NotMe

+0

Oh, pensé que ejecutar el instalador con privilegios administrativos es una configuración predeterminada. ¿Dónde puedo buscar esto? En las propiedades de mi proyecto de instalación no puedo encontrar esto. – Rotaney

Respuesta

3

Quizás la mejor respuesta no es la 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, echa un vistazo a esta respuesta, que cubre el mismo tema:

Allow access permission to write in Program Files of Windows 7

0

Este previously asked question, tiene que introducir en la dirección correcta. Básicamente, usted hace NO quiere que cualquier 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 solo archivo que todos los usuarios escriban, lo querrá en la carpeta ProgramData, accesible a través del %ALLUSERSPROFILE%, en lugar de la carpeta temporal de los usuarios individuales, que es definitivamente lo que usted desea para 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.

3

¿No le falta la afirmación de que realmente estableció el control de acceso en el directorio?

Directory.SetAccessControl(Directory.GetCurrentDirectory(), ds); 
Cuestiones relacionadas