Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   TRegistry: Unterschied zwischen Konsole und GUI? (https://www.delphipraxis.net/169313-tregistry-unterschied-zwischen-konsole-und-gui.html)

DeddyH 11. Jul 2012 14:28

TRegistry: Unterschied zwischen Konsole und GUI?
 
Hallöle,

gegeben sei folgende Funktion:
Delphi-Quellcode:
function GetTheUltimateAnswer(out Value: string): Boolean;
const
  Key  = 'SOFTWARE\Deep Thought';
  Ident = 'Die Frage nach dem Leben, dem Universum und einfach allem';
var
  Reg: TRegistry;
begin
  Value := '';
  Result := false;
  Reg := TRegistry.Create(KEY_READ);
  try
    Reg.RootKey := HKEY_LOCAL_MACHINE;
    if Reg.OpenKey(Key, false) then
      try
        Value := Reg.ReadString(Ident);
        Result := Value <> '';
      finally
        Reg.CloseKey;
      end;
  finally
    Reg.Free;
  end;
end;
In einem GUI-Programm bekomme ich true und damit einen Wert zurück, in einer Konsolenanwendung nicht (natürlich bei exakt identischem Code). Hat jemand eine Ahnung, woran das liegen könnte?

Nachtrag: mit einem anderen Schlüssel funktioniert das auch in der Konsole, hä? :gruebel:

Bummi 11. Jul 2012 14:32

AW: TRegistry: Unterschied zwischen Konsole und GUI?
 
42

Rechte?

DeddyH 11. Jul 2012 14:34

AW: TRegistry: Unterschied zwischen Konsole und GUI?
 
Leserechte sind vorhanden, außerdem ist das ja derselbe User, oder wird ein Konsolenprogramm in einem anderen Kontext ausgeführt? Achja, OpenKey wird noch ausgeführt, nur beim ReadString kommt nix zurück.

himitsu 11. Jul 2012 14:35

AW: TRegistry: Unterschied zwischen Konsole und GUI?
 
Eventuell bekommt die Konsole andere Rechte, bzw. die (eventuell aktivierte) Virtualisierung greift bei Konsolen anders ein?

Bei Dateioperationen weiß ich z.B. daß dort die OEM-Codepage verwendet wird, wärend GUI-Anwendungen auf ANSI laufen.
(drum sieht WriteLn('ä') etwas komisch aus, bzw FindFirst mit solchen Umlauten wirkt auch nicht unbedingt so, wie gewollt)

MSDN-Library durchsuchenAreFileApisANSI
MSDN-Library durchsuchenSetFileApisToANSI
MSDN-Library durchsuchenSetFileApisToOEM
Vielleicht gibt's sowas auch für die Registry, bzw. es wirkt sich auch auf Diese aus.

[add]
Delphi-Referenz durchsuchenOpenKeyReadOnly?

DeddyH 11. Jul 2012 14:42

AW: TRegistry: Unterschied zwischen Konsole und GUI?
 
Hmm..., der originale Ident enthält einen Tiefstrich, ob es daran liegt? Aber ist der denn unterschiedlich zwischen Ansi und OEM, zumindest ist mir das nie aufgefallen.

Bummi 11. Jul 2012 14:49

AW: TRegistry: Unterschied zwischen Konsole und GUI?
 
Reg := TRegistry.Create(KEY_READ OR KEY_WOW64_64KEY );

geht bei mir im nicht Wow6432Node

DeddyH 11. Jul 2012 14:57

AW: TRegistry: Unterschied zwischen Konsole und GUI?
 
Nochmal: derselbe Code mit demselben Delphi auf demselben System (Vista 32 Business) liefert entweder ein Ergebnis(GUI) oder nicht(Konsole). Wahrscheinlich hat das tatsächlich mit der Zeichenkodierung zu tun, aber bevor ich jetzt mit OEMToCharBuff o.ä. herumhantiere habe ich nun doch ein "normales" VCL-Progrämmchen daraus gemacht. Interessant ist der Effekt trotzdem.

himitsu 11. Jul 2012 15:12

AW: TRegistry: Unterschied zwischen Konsole und GUI?
 
Du kannst auch das {$APP CONSOLE} aus der Konsolenanwendung entfernen, dann ist es quasi eine GUI-Anwendung, ohne GUI.

Funktioniert es dann?

(Notfalls kann man sich dann über CreateConsole AllocConsole ein Konsolenfenster in seine GUI-Anwendung holen)

DeddyH 11. Jul 2012 15:17

AW: TRegistry: Unterschied zwischen Konsole und GUI?
 
Tut auch nicht, nur als Standard-VCL-Programm. Komisch, das. Ich probier das jetzt mal mit Umkodieren, weil es mich interessiert.

[edit] Jetzt wird es ganz ulkig: KeyExists liefert auch unter VCL false, ausgelesen wird trotzdem der richtige Wert :shock: [/edit]

[edit2] Logisch, das müsste ja auch ValueExists heißen :oops: [/edit2]

jaenicke 11. Jul 2012 16:03

AW: TRegistry: Unterschied zwischen Konsole und GUI?
 
Und auch hier wieder mal der Hinweis auf den Process Monitor. ;-) Damit siehst du sofort und ohne Mühe worauf zugegriffen wird...

Damit debugge ich so etwas immer schnell und brauche nicht lange suchen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:50 Uhr.
Seite 1 von 2  1 2      

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