Einzelnen Beitrag anzeigen

Shark99

Registriert seit: 16. Mai 2007
403 Beiträge
 
#1

Problem beim Schreiben eines Regvalue bei XP64 und Vista x64

  Alt 16. Dez 2008, 11:03
Ich schreibe zum Schlüssel:

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Curr entVersion\Run

auf XP x64 and Vista x64.

Delphi-Quellcode:
  h := RegCreateKeyEx(HKEY_LOCAL_MACHINE,PChar(Key),0,nil,0,KEY_ALL_ACCESS OR KEY_WOW64_64KEY,nil,hResult,nil);
  if h <> ERROR_SUCCESS then
  begin
    ShowMessage(SysErrorMessage(GetLastError));
    Exit;
  end;

  try
    h := RegSetValueEx(hResult,PChar(Name),0,REG_SZ,@Value[1],Length(Value)+1);
  finally
    RegCloseKey(hResult);
  end;
Wenn Value ist:

c:\program files\myapp.exe

klappt alles wunderbar.

aber wenn Value ist:

%programfiles%\myapp.exe

landet das in der Registry:

%programfiles(x86)%\myapp.exe

env vars sind:

%programfiles% -> c:\program files
%programfiles(x86)% -> c\program files(x86)

myapp.exe befindet sich in c:\program files and ist eine native 64bit app (geschrieben in c++).

I hab dies als Lösung versucht:

Delphi-Quellcode:
  try
    h := RegDisableReflectionKey(hResult);

  if h <> ERROR_SUCCESS then
  begin
    ShowMessage(SysErrorMessage(GetLastError));
    Exit;
  end;

    h := RegSetValueEx(hResult,PChar(Name),0,REG_SZ,@Value[1],Length(Value)+1);
  finally
    RegCloseKey(hResult);
  end;
Klappt leider nicht. RegDisableReflectionKey ist zwar erfolgreich, aber es wird immer noch %programfiles(x86)% statt %programfiles% reingeschrieben.

Als Notlösung schreibe ich keine Environment Vars in die Registry, sondern die expandierten Werte. Für das Projekt braucht ich aber auch die Env Vars selbst in der Registry.

Danke für die Hilfe im Voraus!
  Mit Zitat antworten Zitat