www.mikrocontroller.net

Forum: PC-Programmierung Lesen der Registry klappt bei Win2008Server nicht mehr;


Important announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: interrupt (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Hallo,

ich habe hier ein Programm, das am Anfang programmspezifische 
Einstellungen aus der Registry liest, was bei Windows 2008 Server nicht 
mehr funktioniert.
Unter XP funktioniert das Programm einwandfrei.

Hier der entsprechende Ausschnitt :

int rck;

rck = (RegOpenKeyEx(HKEY_LOCAL_MACHINE, subkey, 0, KEY_READ, 
&keyopenhandle)==ERROR_SUCCESS);
if (rck)
  {
    ... hier erfolgt das Lesen und die Auswertung der Registry-Einträge, 
aber hierher kommt das Programm bei W2008Server nicht, also ist rck==0
  }

Der Wert für "subkey" ist  "SOFTWARE\????_????\????"
(? : programmspezifische Namen)
Vor dem Start des Programmes wird eine *.reg-datei aufgerufen, die 
benötigten Daten stehe also sicher in der Registry

Autor: Peter II (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
wenn es ein 64bit system ist dann wird der eintrag im 64bit teil 
angelegt. Wenn du mit einem 32bit system abfragst landest du in einem 
anderen Teil der regitry und dort ist dein Eintrag vermutlich nicht da.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
interrupt schrieb:
> Vor dem Start des Programmes wird eine *.reg-datei aufgerufen, die
> benötigten Daten stehe also sicher in der Registry

Das tun sie vermutlich, nur woanders als Du denkst. Registry-Zugriffe 
von 32-Bit-Prozessen werden aus "Kompatibilitätsgründen" in andere 
Bereiche der Registry umgelenkt; dein Registry-Import per *.reg-Datei 
weiß aber davon nichts.

http://msdn.microsoft.com/en-us/library/windows/de...

Autor: interrupt (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Schon seltsam, bei einam anderen 32-Bit CPP-Programm (ebenfalls 
kompiliert mit Gnu CPP) funktioniert das Lesen der Registry mit diesem 
Codefragement einwandfrei :

sprintf(subkey,"SYSTEM\\CurrentControlSet\\Service\\%s\\Daten",SERVICE_N 
AME);

rck = 
(RegOpenKeyEx(HKEY_LOCAL_MACHINE,subkey,0,KEY_READ,&keyopenhandle)==ERRO 
R_SUCCESS);

Danke für die Hinweise, ich werde mal nachsehen, wo die Daten in der 
Registry tatsächlich stehen.
Gilt der "Kompatibilitätsmodus" für Einträge unter 
"SYSTEM\\CurrentControlSet\\Service\\..." nicht ?
Dann würde ich die Daten zukünftig einfach dort eintragen.

Autor: Peter II (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
interrupt schrieb:
> Dann würde ich die Daten zukünftig einfach dort eintragen.

es gibt auch richtlinine wo man seine daten abzulegen hat!

Autor: interrupt (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
interrupt schrieb:
> sprintf(subkey,"SYSTEM\\CurrentControlSet\\Service\\%s\\Daten",SERVICE_N
> AME);

Entspricht 
"sprintf(subkey,"SYSTEM\\CurrentControlSet\\Service\\%s\\Daten",SERVICE_ 
N
AME);" nicht den "Richtlinien", wenn es sich um einen Service handelt ?

Autor: Peter II (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
interrupt schrieb:
> wenn es sich um einen Service handelt ?

woher sollten wir wissen das es sich um ein Service handelt?

Autor: oszi40 (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
1.>Unter XP funktioniert das Programm einwandfrei.
Welcher User?
2.Ob die Rechte stimmen? 2008:Admin ist nicht immer Admin.
3.Ob was versteckt ist?

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Rufus Τ. Firefly schrieb:
> Das tun sie vermutlich, nur woanders als Du denkst. Registry-Zugriffe
> von 32-Bit-Prozessen werden aus "Kompatibilitätsgründen" in andere
> Bereiche der Registry umgelenkt; dein Registry-Import per *.reg-Datei
> weiß aber davon nichts.

Ich habe mich da etwas missverständlich ausgedrückt. Die Daten stehen 
dort, wo sie stehen sollen, aber das Programm liest sie nicht von dort, 
sondern aus einem umgelenkten Registryzweig.

> sprintf(subkey,"SYSTEM\\CurrentControlSet\\Service\\%s\\Daten",SERVICE_N AME);"

aber geht ziemlich sicher schief, da der Zweig korrekt
HKLM\SYSTEM\CurrentControlSet\Services\ ...
heißt -- also Services mit "s" am Ende.

Autor: Peter II (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Rufus Τ. Firefly schrieb:
> ch habe mich da etwas missverständlich ausgedrückt. Die Daten stehen
> dort, wo sie stehen sollen, aber das Programm liest sie nicht von dort,
> sondern aus einem umgelenkten Registryzweig.

dann stehen sie also dort wie sie nicht stehen sollen.

Importiere die daten mal mit %systemroot%\syswow64\regedit

http://support.microsoft.com/kb/305097

Autor: interrupt (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Es ist tatsächlich so, dass dieser Registry-Pfad

sprintf(subkey, "SYSTEM\\CurrentControlSet\\Services\\????\\Daten");

jetzt auch mit der 32-Bit-Anwendung im 64Bit-OS (Windows 2008 Server) 
direkt funktioniert. (???? steht für den tatsächlichen Dienstnamen)

Eine Frage an die Experten :
Welchen "virtuellen" Pfad müsste man im "Kompatbilitätsmodus" angeben, 
wenn man den ursprünglichen Registry-Pfad

sprintf(subkey, "SOFTWARE\\SWIS_REGIO\\????");

weiter benutzen wollte ?

Ausserdem müsste man dann ja noch eine Fallunterscheidung (32/64 
Bit-Betriebssystem) in das Programm einbauen, welche Systemvariable bzw. 
andere Methode würde man dafür am besten verwenden ?

Autor: Robert L. (lrlr)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
dein Problem ist ja eher das:

>Vor dem Start des Programmes wird eine *.reg-datei


die .reg datei, wird sich wie ein 64bit programm verhalten..

besser wäre also, (d)ein 32bit Programm schreibt die reg-einträge 
selber...

?!

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
interrupt schrieb:
> Welchen "virtuellen" Pfad müsste man im "Kompatbilitätsmodus" angeben ...

Lies Dir doch mal den von mir verlinkten MSDN-Artikel über den "Registry 
Redirector" durch.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel




Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder GIF-Format hochladen.
Siehe Bildformate
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net