Avatar billede eht Nybegynder
16. juni 2007 - 22:14 Der er 8 kommentarer og
1 løsning

Vedr. Vista UAC

Mit program checker om en bestemt filtype er associeret med mit program. Hvis ikke skal den registreres.

Da der skal skrives til HKEY_CLASSES_ROOT kræves der administratorrettigheder.

Problemet er relateret til kørsel under Vista:
Jeg kan selvfølgelig godt sætte mit program til at bede om administratorrettigheder hver gang det starter (ved at benytte requestedExecutionLevel=requireAdministrator i UAC-manifestet), men jeg ønsker kun at programmet skal spørge, når det er nødvendigt, dvs. når filtypen ikke er registreret (første gang programmet startes).

Hvordan løses dette?
Avatar billede leif Seniormester
17. juni 2007 - 11:08 #1
Nu koder jeg ikke Delphi (eller noget lign., kun PHP), men du kan ikke forespørge uden Administrator rettigheder og hvis den så ikke er sat så spørge om rettighederne og der efter sætte den
Avatar billede kfz Nybegynder
20. juni 2007 - 00:31 #2
du har i forvejen et tjek for om filtypen er registreret i forvejen.
hvis den ikke er udfører programmet en procedure, i den procedure beder du om rettighederne.
derved vil programmet kun få rettigheden når det er nødvendigt.
Avatar billede eht Nybegynder
20. juni 2007 - 07:34 #3
Ja, jeg kan godt checke om filtypen er registreret, og hvis den den ikke er, så ville det være fint hvis jeg kunne spørge om administrator-rettigheder på dette tidspunkt, men hvordan gør jeg det?
Avatar billede kfz Nybegynder
20. juni 2007 - 10:12 #4
hvis du smider den kode du har i forvejen på eksperten, så kan jeg rette den til. ellers kan jeg godt lave et stykke pseudo kode til dig.
Avatar billede eht Nybegynder
20. juni 2007 - 19:06 #5
Det er vist mest overskueligt at bruge pseudokode.

Det går i alt sin enkelthed ud på at kunne skrive til HKEY_CLASSES_ROOT under Vista f.eks. sådan her, uden at få en fejlmeddelelsen "Failed to set data":

procedure TForm1.Button1Click(Sender: TObject);
var MyReg : TRegInifile;
begin


  MyReg := TRegInifile.create('');
  try
    MyReg.RootKey := HKEY_CLASSES_ROOT;

    if MyReg.ReadString('Test','Test','') <> 'ABCD' then
    begin
    // her skal der spørges om og gives rettigheder.
    //Altså kun hvis nøglen ikke findes.
    MyReg.WriteString('Test','Test','ABCD');
    end;
  finally
  MyReg.free;
end;

end;


Det skal ske uden at programmet fra starten har spurgt om lov til at få administratorrettigheder ved hjælp af et manifest som dette:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <dependency>
    <dependentAssembly>
      <assemblyIdentity
        type="win32"
        name="Microsoft.Windows.Common-Controls"
        version="6.0.0.0"
        publicKeyToken="6595b64144ccf1df"
        language="*"
        processorArchitecture="x86" />
    </dependentAssembly>
  </dependency>

  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel
          level="requireAdministrator"/>
      </requestedPrivileges>
    </security>
  </trustInfo>
</assembly>

Læs evt. mere om brug af sådanne manifester her:

http://developersoven.blogspot.com/2007/02/leveraging-vistas-uac-with-delphi-part_27.html
Avatar billede kfz Nybegynder
28. juni 2007 - 14:03 #6
Har lige i et andet spm. fundet ud af at eksperten ikke er specielt glad for at uploade mine kommenterer, jeg kan dog stadig nogenlunde huske hvad jeg skrev.

Jeg har desværre ikke selv vista, så kan ikke lave et eksempel, men i det link du har lagt, vil jeg sige at det er side 3 der er interessant for dig, og ikke side 2.
Avatar billede eht Nybegynder
28. oktober 2011 - 12:59 #7
Hej Kfz.
Denne tråd er aldrig afsluttet.
Smid et svar, hvis du ønsker point.
Avatar billede kfz Nybegynder
28. oktober 2011 - 14:09 #8
Ja det er da vidst et par dage siden :)

Fik du nogensinde løst problemet?
Avatar billede eht Nybegynder
28. oktober 2011 - 14:13 #9
Jo tak.
Det lykkedes.
Tak for svar.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester