AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Registry Key unter Win 7 aus D7-Anwendung heraus lesend öffnen
Thema durchsuchen
Ansicht
Themen-Optionen

Registry Key unter Win 7 aus D7-Anwendung heraus lesend öffnen

Ein Thema von MatthiasR · begonnen am 12. Apr 2011 · letzter Beitrag vom 13. Apr 2011
Antwort Antwort
MatthiasR

Registriert seit: 21. Apr 2005
193 Beiträge
 
#1

Registry Key unter Win 7 aus D7-Anwendung heraus lesend öffnen

  Alt 12. Apr 2011, 15:56
In einer D7-Anwendung möchte ich gerne lesend auf einen Key in der Registry zugreifen. Unter Win XP funktioniert das auch tadellos, nur unter Win 7 nicht, obwohl der Key laut regedit.exe definitiv vorhanden ist. Hier mein Code:

Delphi-Quellcode:
function TForm1.IsVCPPRuntimeInstalled: Boolean;
const
  RegistryPfad = 'SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\' +
    'UserData\S-1-5-18\Products\b25099274a207264182f8181add555d0\InstallProperties';
var
  Registry: TRegistry;
  DisplayName: string;
  DisplayVersion: string;
begin
  Result := False;

  Registry := TRegistry.Create;
  try
    Registry.RootKey := HKEY_LOCAL_MACHINE;

    // prüfen, ob der Pfad auch wirklich existiert
    if (Registry.OpenKeyReadOnly(RegistryPfad)) then
    begin
      // den Namen und die Version auslesen
      DisplayName := Registry.ReadString('DisplayName');
      DisplayVersion := Registry.ReadString('DisplayVersion');

      if (AnsiUpperCase(DisplayName) = AnsiUpperCase('Microsoft Visual C++ 2005 Redistributable')) and
        (DisplayVersion = '8.0.56336') then
      begin
        Result := True;
      end;
    end;
  finally
    FreeAndNil(Registry);
  end;
end;
Was mache ich falsch? Das Registry.OpenKeyReadOnly schlägt fehl, auch wenn ich die Anwendung mit Administrator-Rechten ausführe.

Danke im Voraus für eure Hilfe!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#2

AW: Registry Key unter Win 7 aus D7-Anwendung heraus lesend öffnen

  Alt 12. Apr 2011, 16:21
UAC und die Virtualisierung spielen auch noch mit.

Versuche mal, ob es geht, wenn du deiner anwendung ein Win7-Kompatibilitäts-Manifest mitgibst.

> Hier im Forum suchenManifestCreator > unterstütztes Betriebssystem
> bzw. folgenden Teil in dein Manifest aufnehmen
Code:
<assembly ...

  <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
    <application>
      <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
    </application>
  </compatibility>
Ansonsten gibt es auch Befehle, welche die Virtualisierung abschalten. (sollte sich bestimmt schon irgendwas in der DP finden lassen)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
MatthiasR

Registriert seit: 21. Apr 2005
193 Beiträge
 
#3

AW: Registry Key unter Win 7 aus D7-Anwendung heraus lesend öffnen

  Alt 13. Apr 2011, 09:42
Habe mir mal mithilfe deines Tools eine Manifest-Datei erzeugt, in der ich sowohl Vista-, als auch Win7-Kompatibilität angegeben habe. Die kompilierte Ressourcen-Datei habe ich dann mittels Compiler-Direktive "$R" in das Projekt eingebunden. "$INCLUDE" - wie in deinem Tool angegeben - brachte mir eine Fehlermeldung, weil mein D7 mit dem Binärcode in der manifest.res-Datei nicht klar kam.

Jedenfalls brachte das nichts, der Registry-Eintrag wurde trotzdem nicht gefunden. Wobei ich testweise auch mal unter D2007 ne Exe erzeugt und dort den Haken "Runtime Themes" gesetzt hatte, was glaube ich effektiv das gleiche bewirkt (Manifest einbinden)?!?

Wie ich die Virtualisierung für eine alte D7-Anwendung komplett ausschalten kann, habe ich bisher noch nicht herausgefunden. Wobei ich gar nicht wusste, dass auch in der Registry Virtualisierung stattfindet, sondern nur auf Verzeichnis-Ebene (also bspw. unter C:\Programme\...).

Was ich in der DP noch gefunden habe, ist dieser Thread. Da geht es darum, dass unter einem 64-Bit-Betriebssystem manche Registry-Zweige woandershin virtualisiert werden, als unter einem 32-Bit-Betriebssystem (wenn ich das richtig verstanden habe). Da es sich bei unserem Testsystem um ein 64-Bit-Win7 handelt, die Anwendung aber eine 32-Bit-Anwendung ist, könnte das u.U. auch der Grund sein.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.541 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Registry Key unter Win 7 aus D7-Anwendung heraus lesend öffnen

  Alt 13. Apr 2011, 09:53
Man hätte ja dazu sagen können, dass es sich um 64 Bit handelt
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
MatthiasR

Registriert seit: 21. Apr 2005
193 Beiträge
 
#5

AW: Registry Key unter Win 7 aus D7-Anwendung heraus lesend öffnen

  Alt 13. Apr 2011, 10:14
Man hätte ja dazu sagen können, dass es sich um 64 Bit handelt
Hätte ich gewusst, dass es eine Rolle spielen könnte, hätte ich es getan

Muss aber in der Tat eine Rolle spielen. Habe das ganze mal auf einem 32-Bit Windows 7 ausprobiert und dort funktioniert es. Jetzt muss ich nur noch rausfinden, wie ich das unter Win7 64-Bit zum Laufen kriege. Mit "TRegistry.Create(KEY_ALL_ACCESS OR KEY_WOW64_64KEY)" kann ich unter D7 ja nicht arbeiten, da der Wert KEY_WOW64_64KEY nicht bekannt ist.
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#6

AW: Registry Key unter Win 7 aus D7-Anwendung heraus lesend öffnen

  Alt 13. Apr 2011, 10:25
Hi,

hier solltest du die Entsprechung finden:
http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx


LG, Frederic
Frederic Kerber
  Mit Zitat antworten Zitat
MatthiasR

Registriert seit: 21. Apr 2005
193 Beiträge
 
#7

AW: Registry Key unter Win 7 aus D7-Anwendung heraus lesend öffnen

  Alt 13. Apr 2011, 10:50
Danke dir! In dem von mir verlinkten Thread führt der Threadersteller den Key selbst schon ein, hatte ich völlig übersehen:
Delphi-Quellcode:
const
 KEY_WOW64_64KEY = $0100;
 KEY_WOW64_32KEY = $0200;
  Mit Zitat antworten Zitat
MatthiasR

Registriert seit: 21. Apr 2005
193 Beiträge
 
#8

AW: Registry Key unter Win 7 aus D7-Anwendung heraus lesend öffnen

  Alt 13. Apr 2011, 13:45
So, ich habe mich jetzt noch ne ganze Weile damit rumgeärgert, weil der Lösungsansatz aus dem oben genannten Thread bei mir nicht funktionieren wollte. Bis ich dahinter gekommen bin, dass man unter 64-Bit Windows die Methode "TRegistry.OpenKeyReadOnly" tunlichst nicht verwenden sollte! Immer "OpenKey" verwenden zusammen mit dem richtigen Access-Modus "KEY_READ or KEY_WOW64_64KEY", dann klappts auch mit dem Nachbarn .
  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 22:01 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