c ++ - UAC, kræver Administrator og filer adgang

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har et problem med UAC på Vista/7. Mit installationsprogram med UAC Execution Level=kræverAdministrator installerer og kører min app. App UAC Execution Level=asInvoker. Så første gang app løbet af installatør - det kører som administrator. Derefter opretter app nogle filer for at gemme selvtilstand. Senere - hvis app lanceres af bruger, ikke som administrator - app kan kun læses fra oprettede filer, men kan ikke overskrive dem. Jeg forsøgte at deaktivere UAC i app manifestet eller bygge app uden manifest, men resultatet er stadig det samme - - Hver fil, der oprettes, når appen løb som administrator, kan ikke overskrives, når app kører som bruger. Jeg forsøgte nogle andre installatører som Inno Setup, men der er ikke noget som mit problem ... Så mit spørgsmål - hvorfor sker det i mit tilfælde og hvordan man løser det? Tak.


P. S. Vigtige noter
1. Faktisk er det ikke installatør. Dette er et værktøj til at opdatere main app-eksekverbare filer. Main app check server til opdateringer, hvis nogen er tilgængelig - downloader opdateringer til temp mappen og derefter starte værktøj med forhøjede rettigheder (http://www.codeproject.com/KB/vista-security/UAC\_\_The\_Definitive\_Guide.aspx) for at erstatte eksekverbare filer i mappen Program Files. Hovedappen afslutter lige efter start af værktøjet.
2. Alle filer applikationer gemmer i mappen ProgramData \ myAppName.

Bedste reference


Er din installationsprogram kun til den aktuelle bruger eller til alle brugere på maskinen?


Ved installation pr. Bruger er det hensigtsmæssigt for installationsprogrammet at oprette den oprindelige applikationstilstand i brugerens AppData-mappe. MSI kører installationer per bruger ikke forhøjet, så der er ikke noget problem med filer i AppData-mappen, som dine applikationer ikke kan ændre.


Ved installation pr. Maskine er det ikke fornuftigt at sætte noget i den specifikke brugers AppData-mappe eller hvor som helst under brugerens profilplacering. Nye brugere kan logge på maskinen, efter at applikationen er installeret, og de ville ikke have noget der.


Når det er sagt, har du tre løsninger (faktisk to løsninger og et hack):



  1. Brug installation pr. bruger. Indstil ALLUSERS=2 og MSIINSTALLPERUSER=1. Din MSI vil blive kørt ikke forhøjet. MSI er gratis at indsætte nogen statsfiler i AppData-mappen.

  2. Brug installation pr. maskine. Skriv ikke til brugerens appdata. I stedet skal du skrive indledende tilstandsfiler i\% ALLUSERSPROFILE\%. De vil være skrivebeskyttet til ansøgning. Rediger din ansøgning til at kopiere startstatus fra\% ALLUSERPROFILE\% til den aktuelle brugerprofil ved første kørsel.

  3. Tilføj tilpasset handling til din installatør for at tilføje bruger til ACL'er.



(# 3) er et hack, og jeg anbefaler det ikke, fordi din ansøgning vil blive brudt til nye brugere, eller når brugeren genskaber sin profil på maskinen.

Andre referencer 1


Du bør ikke starte din primære app forhøjet, hvis den ikke kræver administratorrettigheder. Hvilken type installatør bruger du?


MSI kører med nuværende brugerrettigheder og hæver kun for at foretage ændringer i systemet. Når installationen er fuldført, kan du starte din hovedapp, og den bliver kørt som den nuværende bruger, ikke forhøjet.


Hvis du brugerdefineret setup.exe, kan du starte dit installationsprogram ikke forhøjet. Når tiden kommer til at installere filer, skal du starte en anden proces (det kan være det samme eksekverbare) for at installere filer og foretage systemændringer. Når dette trin er færdigt, kan du genstarte din hovedapps som ikke forhøjet fra den oprindelige proces.


Alternativt kan du, med din nuværende tilgang, hvor opsætningen og opdateringen løber op, følge instruktionerne på Hvordan starter jeg et program som desktopbruger fra en forhøjet app for at starte din hovedapp ikke forhøjet . [1]


Bemærk: Standardtilladelserne på ProgramData tillader alle at oprette filer og mapper, men kun den bruger, der oprettede dem, kan ændre filerne (eller administrator). For at overvinde dette har du to muligheder:



  1. Opret datafiler direkte i brugerprofil. Hver bruger vil have deres egne data.

  2. Opret brugerprofildata fra almindelig skabelon gemt i ProgramData, som foreslået af Seva i option 2. I dette tilfælde vil hver bruger også have deres egne data.

  3. Eller modificer ACL'er på dine ansøgningsdata i ProgramData-mappen for at tillade dets modifikation af alle, ikke kun den bruger, der oprettede mappen og filerne.