Frage

Ich mache den folgenden Aufruf:

result = RegOpenKeyEx(key, s, 0, KEY_READ, &key);

(C ++, Visual Studio 5, Vista 64bit).

Es wird mit Fehlercode 2 ( „Datei nicht gefunden“), obwohl „regedit“ zeigen Fehler, dass der Schlüssel vorhanden ist. Dieser Code hat immer auf 32-Bit-XP gearbeitet. Warum ist es „Datei nicht gefunden“, wenn es klar ist?

War es hilfreich?

Lösung

Ich entdeckte, dass ich mein Problem mit der Flagge lösen könnte: KEY_WOW64_64KEY, wie in:

result = RegOpenKeyEx(key, s, 0, KEY_READ|KEY_WOW64_64KEY, &key);

Für eine vollständige Erklärung: 32-Bit- und 64- Bit-Anwendungsdaten in der Registrierung

Andere Tipps

Auf einem Windows-64-Bit-System wird die Registry tatsächlich in zwei Teile geteilt. Ein Teil wird von 64-Bit-Prozessen verwendet wird, und ein Teil von 32-Bit-Prozessen.

Wenn beispielsweise eine 32-Bit-Anwendung programmatisch schreibt, was es glaubt, ist HKLM \ SOFTWARE \ Unternehmen \ Application, ist es tatsächlich umgeleitet durch die WoW64-Schicht zu HKLM \ SOFTWARE \ Wow6432Node \ Unternehmen \ Anwendungs.

Also, wenn Sie führen Sie Ihre 32-Bit-Anwendung und rufen RegOpenKeyEx es funktioniert tatsächlich gegen den Wow6432Node \ Ordner und nicht der reguläre \ SOFTWARE Knoten.

Sie haben mit "Use Multi-Byte-Zeichensatz" oder Guss Zeichenfolge im Code (LPWSTR)

kompilieren

Ich hatte ein ähnliches Problem. Ich war mit:

dwResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
                                   (LPWSTR)"SOFTWARE\\0test",
                                   0,
                                   WRITE_DAC ,
                                   &hKey);

, die nicht funktionierten. Ich habe versucht, es so und es hat funktioniert:

dwResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
                                   _T("SOFTWARE\\0test"),
                                   0,
                                   WRITE_DAC ,
                                   &hKey);

ja, win7 64B, fügen Sie weitere Flagge KEY_WOW64_64KEY, wird es funktionieren. wenn nicht, siehe http: // msdn. microsoft.com/en-us/library/ms724897(v=VS.85).aspx

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top