Avatar billede eht Nybegynder
27. oktober 2011 - 21:49 Der er 9 kommentarer og
1 løsning

Hvad skal jeg gøre for at få lov til at skrive til HKEY_LOCAL_MACHINE

Hvad skal jeg gøre for at få lov til at skrive til HKEY_LOCAL_MACHINE under Windows 7.

Jeg har benyttet denne kode, men får en fejl "Failed to create key ABC"

var MyReg : TRegInifile;
begin

    MyReg := TRegInifile.create('SOFTWARE');
    MyReg.RootKey := HKEY_LOCAL_MACHINE;
    MyReg.WriteString('ABC', 'Test', 'MyString');
    MyReg.free;
end;

Dette sker uanset om jeg højreklikker på mit program og vælger "Kør som administrator" eller løfter programmet op med
manifestet:

<?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>


Nogen ideer?
27. oktober 2011 - 23:25 #1
Psssssst:
www.eksperten.dk/list/aabnespoergsmaal/eht Point ude: 1.520 ? - som du før har fået at vide ...
Avatar billede Jensen DK Novice
28. oktober 2011 - 07:31 #2
Med så mange åbne spørgsmål kan du da ikke forvente, at nogen har løst til at hjælpe dig.
Avatar billede eht Nybegynder
28. oktober 2011 - 07:53 #3
Nu inden det bliver til en hetz.

Jeg vil ikke afvise at der er en smutter, men de fleste spørgsmål er åbne, fordi der ikke er kommet svar/løsning på problemet.
Jeg har nok selv fundet løsning på en meget af det, men burde selvfølgelig have vist løsningen.

Kan i øvrigt ikke huske at jeg er blevet gjort opmærksom på det før. Jeg har ikke brugt eksperten så meget i et stykke tid.
Jeg vil bruge lidt tid på at få "ryddet" op.

Håber på fortsat god stemning.
Avatar billede eht Nybegynder
28. oktober 2011 - 13:09 #4
Så har jeg haft gang i oprydningen.

Status:
Glemt at acceptere svar 2 tråde.
Svaret med ønsker ikke point: 1 tråd.
Svaret selv: 5 tråde.
Ingen indlæg: 4 tråde
Ingen relevante indlæg: 3 tråde.
Point afgivet dog uden afgørende præcist svar: 3 tråde
Har bedt om svar til 6 tråde, de fleste dog uden afgørende præcise svar, men alligevel point for tak for forsøget.

Så håber jeg den er ude af verden.
Avatar billede mbsnet Nybegynder
31. oktober 2011 - 07:00 #5
var r:TRegistry;
begin
r:=TRegistry.create;
r.RootKey := HKEY_LOCAL_MACHINE;
if r.OpenKey('Software',true) then r.WriteString('test','test');
r.CloseKey;
r.free;
end;
Avatar billede eht Nybegynder
31. oktober 2011 - 21:49 #6
Hej mbsnet

Tak, for dit bud på en kode.
Jeg var lige ved at tro at den var lige som den skulle være.
Koden skriver dog ikke "rigtigt" til HKEY_LOCAL_MACHINE.
Man kan f.eks. ikke finde nøglen med regedit.exe, så der må benyttes en eller anden form for virtualisering.

Jeg kunne godt tænke mig at kunne skrive "rigtigt" til HKEY_LOCAL_MACHINE. Det kan jeg med Regedit se at andre programmer kan.

Jeg fik konstrueret en situation, hvor der blev udlæst en forskellig værdi, alt efter om programmet kørte som standardbruger eller administrator, og selv om det var en lidt konstrueret situation, så kan det give en vis usikkerhed ved programkørslen.

Jeg har arbejdet under Win 7.
Avatar billede mbsnet Nybegynder
01. november 2011 - 07:41 #8
Den gamle registry.pas er sådan set ikke rustet til 64 bit, kan sikkert fikses, men du kan også gå helt uden om den unit:

const
KEY_WOW64_64KEY = $0100;    //Access a 64-bit key from either a 32-bit or 64-bit application.
KEY_WOW64_32KEY = $0200;    //Access a 32-bit key from either a 32-bit or 64-bit application.

//These flags can be specified in the samDesired parameter of the following registry functions:
//RegCreateKeyEx
//RegDeleteKeyEx
//RegOpenKeyEx

procedure TForm1.Panel1Click(Sender: TObject);
var h:tHandle;hResult:hkey;  value:string;
begin

h := RegCreateKeyEx(HKEY_LOCAL_MACHINE,'SOFTWARE\abc',0,nil,0,KEY_ALL_ACCESS OR KEY_WOW64_64KEY,nil,hResult,nil);
  if h <> ERROR_SUCCESS then
  begin
    caption:='error';
    Exit;
  end;

  value:='test2';
  try
    h := RegSetValueEx(hResult,'test',0,REG_SZ,pChar(value),Length(value)+1);
  finally RegCloseKey(hResult) end;

end;
Avatar billede eht Nybegynder
01. november 2011 - 08:56 #9
Hej mbsnet
Tak for indlæggene.
De forklarer problematikken fint.
Skriv et svar.

Mvh.
Erik
Avatar billede mbsnet Nybegynder
01. november 2011 - 18:55 #10
sv:
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