![]() |
Problem beim Schreiben eines Regvalue bei XP64 und Vista x64
Ich schreibe zum Schlüssel:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Curr entVersion\Run auf XP x64 and Vista x64.
Delphi-Quellcode:
Wenn Value ist:
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; 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:
Klappt leider nicht. RegDisableReflectionKey ist zwar erfolgreich, aber es wird immer noch %programfiles(x86)% statt %programfiles% reingeschrieben.
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; 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! |
Re: Problem beim Schreiben eines Regvalue bei XP64 und Vista
Sowohl
h := RegSetValueEx(hResult,PChar(Name),0,REG_EXPAND_SZ, @Value[1],Length(Value)+1); als auch Value := '#%'+Value; h := RegSetValueEx(hResult,PChar(Name),0,REG_EXPAND_SZ, @Value[1],Length(Value)+1); brachten leider keine Lösung. |
Re: Problem beim Schreiben eines Regvalue bei XP64 und Vista
Das ist leider im WOW64-Emulator hart-kodiert.
Wenn der String eines REG_SZ oder REG_EXPEND_SZ kürzer als 535 Zeichen ist (fragt nicht warum, ich bin nicht Microsoft), wird %commonprogramfiles% und %ProgramFiles% (beides case-sensitive!) durch die 32-Bit Entsprechung ersetzt (KEY_WOW64_64KEY wird nicht ausgewertet). Da hilft nur ein nativer Prozess (vielleicht auch WMI, habe ich nicht ausprobiert). Hack: Groß-/Keinschreibung ändern. |
Re: Problem beim Schreiben eines Regvalue bei XP64 und Vista
Danke. Ist zwar ein Hack, aber scheint zu gehen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:55 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz