AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Problem beim Schreiben eines Regvalue bei XP64 und Vista x64
Thema durchsuchen
Ansicht
Themen-Optionen

Problem beim Schreiben eines Regvalue bei XP64 und Vista x64

Ein Thema von Shark99 · begonnen am 16. Dez 2008 · letzter Beitrag vom 17. Dez 2008
Antwort Antwort
Shark99

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

Problem beim Schreiben eines Regvalue bei XP64 und Vista x64

  Alt 16. Dez 2008, 10: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
Shark99

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

Re: Problem beim Schreiben eines Regvalue bei XP64 und Vista

  Alt 16. Dez 2008, 15:24
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.
  Mit Zitat antworten Zitat
Benutzerbild von nicodex
nicodex

Registriert seit: 2. Jan 2008
Ort: Darmstadt
286 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Problem beim Schreiben eines Regvalue bei XP64 und Vista

  Alt 16. Dez 2008, 16:19
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.
  Mit Zitat antworten Zitat
Shark99

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

Re: Problem beim Schreiben eines Regvalue bei XP64 und Vista

  Alt 17. Dez 2008, 03:22
Danke. Ist zwar ein Hack, aber scheint zu gehen.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:06 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz