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!