c # - Hent et system.UnauthorizedAccess undtagelse, når du forsøger at få adgang til en fil fra en standard brugerkonto i vista

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg forsøger at generere en licensnøglefil i den fælles applikationsdatabase i Windows, så når en standardbrugerkonto forsøger at få adgang til min ansøgning, kan applikationen kontrollere, om licensnøglen er gyldig. Licensfilen oprettes ved hjælp af en adminkonto under installationen, men når en standardbrugerkonto forsøger at få adgang til filen, kastes en System.UnauthroizedAccess-undtagelse.


Her er koden jeg bruger til at oprette den mappe, jeg gemmer licensnøglefilen.


FileSystemAccessRule fsAccessRules = new FileSystemAccessRule("USERS", FileSystemRights.FullControl, AccessControlType.Allow);
Directory.CreateDirectory(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) + "\COMPANYNAME\");
Directory.GetAccessControl(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) + "\COMPANYNAME\").AddAccessRule(fsAccessRules);


Tak.

Bedste reference


Jeg tror, ​​problemet er, at du kun ændrer objektet FileSystemSecurity i hukommelsen, hvilket betyder at du ikke gemmer ændringerne. Fra dokumenterne til AddAccessRule ser det ud til at du skal ringe SetAccessControl for at gemme ændringerne tilbage til disken efter at have ringet AddAccessRule. Dette opdaterer sikkerhedsbeskrivelsen på filen med den adgangsregel du tilføjede. [7] [8]


Denne kodeprojektartikel har nogle gode eksempler: Tillad skrive/modificer adgang til CommonApplicationData [9]


En anden ting at overveje: Hvis du kun har brug for brugerne til at læse denne fil, kan du overveje at give dem et mere begrænset sæt rettigheder, f.eks. FileSystemRights.Read. Dette ville forhindre, at brugerne faktisk ændrer licensfilen, forudsat at de ikke har brug for denne evne.