Registry Abfrage <=> Programmabsturz

jphonic

Grünschnabel
Hallo. Ich möchte ein Programm starten und dabei einen Wert aus der Registry verwenden. Habe den Code etwas reduziert (so macht das Programmstarten zwar keinen Sinn mehr, aber es veranschaulicht mein Problem).

Code:
#include <windows.h>
#include <winreg.h>

int main(int argC, char **argS){
	stringstream runCommand;
    runCommand << "\"cmd\"";

    HKEY hKey;
    int result = RegOpenKeyEx( HKEY_LOCAL_MACHINE, "SOFTWARE", 0, KEY_QUERY_VALUE, &hKey );
    runCommand << " echo " << result << endl;
    RegCloseKey(hKey);

    // MessageBox( NULL, runCommand.str().c_str(), "command", 0);
    WinExec(runCommand.str().c_str(), SW_SHOW);
    return(0);
}

so beendet sich da Programm nicht und benutzt 100% meine Prozessors. lass ich die RegOpenKeyEx und RegCloseKey Befehle weg oder nehme ich die MessageBox hinzu, funktioniert alles wunderbar. Was ist mit meiner Registryabfrage falsch? Es kann doch nicht sein, dass eine Registryabfrage eine GUI-Ausgabe erfordert?
 
Hallo,

ich kann das beschriebende Verhalten hier nicht reproduzieren. An der Abfrage der Registry gibt es meiner Ansicht nach auch nichts auszusetzen. Kannst du vielleicht nachvollziehen, an welcher Stelle das Programm hängt (z.B. mit einem Debugger)?

Grüße,
Matthias
 
also das ist ganz komisch. habe bis her noch nie mit einem debugger gearbeitet, er liefert folgendes:

Code:
No symbol "Notepad" in current context.
Cannot access memory at address 0x7cc
A parse error in expression, near `if'.
No symbol "RegQueryValueEx" in current context.
Cannot access memory at address 0x7cc
Cannot access memory at address 0x7cc
No symbol "DEFAULT" in current context.
Cannot access memory at address 0x7cc
Cannot access memory at address 0x7cc
No symbol "oProcessInfo" in current context.
Cannot access memory at address 0x7cc

er arbeitet alles ab bis zum schluss, dann erst geht die prozessorauslastung hoch (vorher wurde ja immer wieder pausiert), aber wie gesagt, alles bis zu dem return() wird abgearbeitet.
 
Nja dein Beispiel ist so nicht compilierbar:
C++:
#include <windows.h>
// #include <winreg.h> unnötig!

int main()
{
    ::HKEY hKey(NULL);
    if (::RegOpenKeyEx(HKEY_LOCAL_MACHINE, TEXT("SOFTWARE"), 0, KEY_QUERY_VALUE, &hKey) != ERROR_SUCCESS)
    {
        ::MessageBox(NULL, TEXT("Der Key konnte nicht gelesen werden!"), NULL, MB_OK | MB_ICONERROR);
        return 1;
    }

    // use  ::RegQueryValueEx-Function
    
    ::RegCloseKey(hKey);
}
... sollte soweit bei dir doch laufen, oder?
 
ich kompiliere mit mingw32.

wenn ich dein beispiel benutze, läuft alles. wenn ich bei dir zeile 9 auskommentiere, tritt der absturzfehler aber wieder auf. immer wenn ich eine registryabfrage wie hier habe und keine messagebox öffne, passiert es. das ist echt nervig. ist das bei euch nicht so?
 
Zurück