Autor Téma: Nenacita niektore polozky z registra na windows 8  (Přečteno 2071 krát)

asdfasdf

  • Host
Nenacita niektore polozky z registra na windows 8
« kdy: 24-07-2012, 08:57:09 »
Mam problem s windows 8, z registrov nenacita niektore polozky, dal som exportovat kluc:

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
"XXX"="YYY"


Kod ktorym to nacitavam:

var wow : TRegistry;
    chl : string;
begin
        wow := TRegistry.Create;
        try
          wow.RootKey := HKEY_LOCAL_MACHINE;
          if wow.OpenKey('\SOFTWARE\Microsoft\Windows\CurrentVersion\Run',true) then
            chl := wow.ReadString('XXX');
          ShowMessage(chl);
        finally
          wow.CloseKey;
          wow.Free;
        end;


Zobrazi to len prazdny retazec. Pritom ten isty kod vo windows 7, delphi 7 funguje. Restart som skusal.

asdfasdf

  • Host
Re:Nenacita niektore polozky z registra na windows 8
« Odpověď #1 kdy: 24-07-2012, 09:00:10 »
Este dodam ze niektore kluce nacita, napriklad ked nacitam v \SOFTWARE\Microsoft\Windows\CurrentVersion parameter ProgramFilesDir tak to zobrazi spravnu hodnotu, len v tom run nic.

Offline Mi.Chal.

  • Guru
  • *****
  • Příspěvků: 574
  • Karma: 25
Re:Nenacita niektore polozky z registra na windows 8
« Odpověď #2 kdy: 24-07-2012, 09:23:18 »
Kolika bitová je aplikace a systém? 32bit aplikace na 64bit Windows to četly z Wow6432Node, tak jestli nebude problém s tím.

asdfasdf

  • Host
Re:Nenacita niektore polozky z registra na windows 8
« Odpověď #3 kdy: 24-07-2012, 09:48:52 »
Asi 64 bitova, presunul som to do \SOFTWARE\Microsoft\Windows\CurrentVersion\Run v HKEY_CURRENT_USER a tam to zda sa funguje, aj zapis aj citanie

Offline pepak

  • Guru
  • *****
  • Příspěvků: 1412
  • Karma: 34
    • Pepak.net
Re:Nenacita niektore polozky z registra na windows 8
« Odpověď #4 kdy: 24-07-2012, 10:06:47 »
No tak v tom případě to skoro určitě bude souviset s tou virtualizací registrů - pokud ve 32bitové aplikaci čteš HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run, tak tě to ve skutečnosti přesměrovává do HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run, kde pravděpodobně nic není a tudíž to nelze přečíst. Pokud s tím chceš něco dělat, tak buď zkompiluj aplikaci jako 64bitovou, nebo můžeš dočasně zakázat virtualizaci (IsWow64Process, Wow64DisableWow64FsRedirection, Wow64RevertWow64FsRedirection).

Offline Mi.Chal.

  • Guru
  • *****
  • Příspěvků: 574
  • Karma: 25
Re:Nenacita niektore polozky z registra na windows 8
« Odpověď #5 kdy: 24-07-2012, 10:25:00 »
Ještě se při otevírání registrů dalo nějak nastavit, aby to četlo jako 32bit aplikace. Takže i 64bit aplikace to bude číst z toho místa, jako 32bitová

Offline Jan Fiala

  • Příspěvků: 49
  • Karma: 0
    • PSPad editor
Re:Nenacita niektore polozky z registra na windows 8
« Odpověď #6 kdy: 24-07-2012, 14:40:11 »
A ja jen dodam, ze pokud neco ctes, tak nevytvarej klice!

Kód: Delphi [Vybrat]
  1. if wow.OpenKey('\SOFTWARE\Microsoft\Windows\CurrentVersion\Run',true) then ...

Koukni se, co dela ten parametr TRUE v tom OpenKey.
Navic tohle cteni se pokusi otevrit klic pro R/W a na to nemas v HKLM jako obycejny uzivatel pravo. Zkus to otevrit jako:

Kód: Delphi [Vybrat]
  1.  if wow.OpenKeyReadOnly('\SOFTWARE\Microsoft\Windows\CurrentVersion\Run') then ...
« Poslední změna: 24-07-2012, 14:47:21 od Jan Fiala »

Offline Vrtule

  • Mladík
  • **
  • Příspěvků: 54
  • Karma: 10
    • Verze Delphi: XE2
    • Jádro systému Windows
Re:Nenacita niektore polozky z registra na windows 8
« Odpověď #7 kdy: 28-07-2012, 10:26:35 »
Ideální by v tomto případě podle mého názoru bylo pokusit se tu hodnotu načíst přímo prostřednictvím Windows API, tedy funkcí RegOpenKey(Ex) a RegQueryValue. Ty obvykle vracejí rozumné chybové hlášky. A navíc lze při otevírání klíče specifikovat, zda se má s aplikací počítat jako s 32bitovou či s 64bitovou.