MessageBox aktiviert sich nicht in Release-Version...



  • Hallo Leute,

    ich hab mal wieder ein Problem mit meinem C++-Script.

    Folgender Code-Ausschnitt macht mir Ärger:

    /* Is IE started? Then tell user to close it first and stop! */
    		    PROCESSENTRY32 entry;
    		    entry.dwFlags = sizeof( PROCESSENTRY32 );
        		HANDLE snapshot = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0);
    
    		    if ( Process32First( snapshot, &entry ) == TRUE ) {
    		        while ( Process32Next( snapshot, &entry ) == TRUE ) {
    					if ( stricmp( entry.szExeFile, "iexplore.exe" ) == 0 ) {
    						exit(MessageBox(NULL, "Please close the programm \"InternetExplorer\" before you start this application!", "Please close InternetExplorer", MB_ICONWARNING));
    					}
    		        }
            	}
    
    			CloseHandle( snapshot );
    

    Was ich damit vor habe:
    Ich will sehen, ob der InternetExplorer bereits vom Benutzer gestartet wurde oder nicht und wenn, soll eine Fehlermeldung ausgegeben und das Programm terminiert werden (das derzeitige, nicht der IE).

    Das funktioniert auch alles erstmal ganz toll so wie ich es will, wenn ich in Code::Blocks das BuiltTarget auf "Debug" stelle.
    Sobald ich allerdings auf "Release" schalte, bricht weder das Programm ab noch kommt die Message-Box hoch wenn der IE gefunden wird.

    Kann mir jemand vielleicht einen Tipp geben was ich falsch mache? Ich tippe ein bißchen darauf, dass MessageBox im Release-Built nicht beachtet wird, weiss aber nicht so genau, was ich dagegen tun kann?

    Viele Grüße und vielen Dank im Voraus!
    *Fuchur*





  • Fehler 1: nicht entry.dwFlags, sondern entry.dwSize = sizeof 🙂
    Fehler 2: snapshot auf INVALID_HANDLE_VALUE prüfen, oder printf/puts benutzen
    Fehler 3: if(etwas == TRUE) // etwas muss exact EINS sein.

    BOOL my_function()
    {
       return TRUE;
       return 2; // 2 ist auch TRUE
       return -1; // -1 ist auch TRUE
       return FALSE; // nur zero ist FALSE.
    }
    if (my_function()) ok(); else error();
    


  • @Fuchur84
    In Member dwSize nicht dwFlags der PROCESSENTRY32 muss die Größe abgelegt werden.
    Emfehlenswert ist es auch das Handle snapshot auf Gültigkeit zu prüfen - ein ungültiges Handle brauchst du auch nicht zu schließen und auch nicht versuchen dann die Prozesse auszulesen.
    In deinem Codeschnipsel wird der erste gefundene Prozess nicht berücksichtigt.
    Wenn der Prozess gefunden wird, steigt dein Programm aus, ohne das Handle zu schließen.



  • Supervielen lieben Dank!

    Nachdem ich den Handle auf INVALID_HANDLE_VALUE getestet, den Handle dann auch geschlosse hab wenn er aussteigt und den ersten Eintrag ebenfalls berücksichtigt habe, klappt es wunderbar!

    Vielen dank an euch alle 🙂
    Viele Grüße


Anmelden zum Antworten