2010-10-13 11 views
6

Ho creato un programma in Visual Studio. Il programma crea un file di log e lo scrive mentre il programma è in esecuzione. Quindi ho costruito un programma di installazione (setup-project), che dovrebbe impostare i permessi di scrittura per la mia cartella del programma indipendentemente da quale utente lavora con il programma. attualmente sembra che questo:Impostare le autorizzazioni di scrittura per tutti gli utenti per la cartella del programma

// ... 
} 
    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)); 
} 
// ... 

Negli ultimi due file ottengo un System.SystemException: “Die Vertrauensstellung zwischen der primären Domäne und der vertrauenswürdigen Domäne konnte nicht hergestellt werden.”

[Traduzione: "Il non è stato possibile stabilire relazione di trust tra il dominio primario e il dominio trusted "]

lo stacktrace legge come questo:.

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) 

Hai idea di cosa posso fare? grazie

+4

Avete eseguito l'installatore con privilegi amministrativi? – Dennis

+3

Si noti che esiste una ragione per le varie cartelle pubbliche su un dato sistema per la memorizzazione dei dati del programma ... – NotMe

+0

Oh, pensavo che eseguire l'installer con i privilegi amministrativi fosse un'impostazione predefinita. Dove posso cercare questo? Nelle proprietà del mio progetto di installazione non riesco a trovarlo. – Rotaney

risposta

3

Forse la risposta migliore non è quello che hai chiesto. C'è una buona ragione per non scrivere nella directory dei file del programma. I dati di registro in particolare sono transitori e non dovrebbero essere scritti qui.

È un'idea molto migliore scrivere i dati del registro nella directory specificata dalla variabile di ambiente TEMP. Se lo fai, risparmierai alcuni problemi e impedirai loro di maledire il tuo software in futuro. Si prega di controllare questa risposta che copre lo stesso argomento:

Allow access permission to write in Program Files of Windows 7

0

Questo previously asked question dovrebbe puntare nella giusta direzione. Fondamentalmente, si fa NON si desidera che qualsiasi utente che scrive nella cartella Program Files. UAC, sicurezza e altre misure sono lì per cercare di prevenirlo il più possibile. In pratica, se vuoi un singolo file che verrà scritto da tutti gli utenti, lo vorrai nella cartella ProgramData, accessibile tramite lo %ALLUSERSPROFILE%, anziché nella cartella temporanea dei singoli utenti, che è sicuramente quello che vuoi fare con un file di registro. Ricorda che il contenuto della cartella temporanea deve essere considerato volatile e che potrebbe essere eliminato in qualsiasi momento, ad esempio tramite la Pulizia guidata disco.

3

Non ti manca l'istruzione in cui hai effettivamente reimpostato il controllo di accesso alla directory?

Directory.SetAccessControl(Directory.GetCurrentDirectory(), ds); 
Problemi correlati