Warten auf das Beenden einer Anwendung



  • Hallo zusammen,

    ich muss aus einem C++ Programm heraus eine Anwendung starten und solange warten, bis diese beendet ist (oder ein Timeout eintritt).
    Erst dann soll das Programm mit einer durch die andere Anwendung erzeugten Datei weiterarbeiten.

    Da ich nur sehr selten mit C++ arbeite, hoffe ich, dass mir jemand einen Tipp geben kann, wie ich das bewerkstelligen kann.
    Ich habe etwas von der API-Funktion WaitForSingleObject gelesen, bin damit aber leider nicht zurecht gekommen 😞

    Schon einmal vielen Dank für Eure Hilfe.

    Gruß,
    Hendrik



  • CreateProcess dürfte das sein, was du suchst



  • genau.

    Bei CreateProcess bekommst du u.a. einen handle zurück, auf den du dann bei WFSO wartest.



  • Hallo,

    danke Euch für die schnelle Antwort.
    Könntet Ihr mir vielleicht sagen, wie ich diese Funktion genau anwende?

    Ich möchte einen String haben, der den Pfad zur Anwendung enthält und diese dann startet.

    Gruß,
    Hendrik



  • so,
    ich habe bislang folgenden Code, der sogar funktioniert 😉

    #include "stdafx.h"
    #include <iostream>
    #include <string>
    #include "windows.h"
    
    using namespace std;
    
    int main(int argc, char* argv[])
    {
    	string app = "c:\\winnt\\notepad.exe";
    
    	STARTUPINFO si;
    	PROCESS_INFORMATION pi;
    	memset(&si,0,sizeof(STARTUPINFO));
    	si.cb=sizeof(STARTUPINFO);
    	si.dwFlags=STARTF_USESHOWWINDOW;
    	si.wShowWindow=SW_SHOW;
    
    	if(!CreateProcess(NULL,"c:\\winnt\\notepad.exe",NULL,NULL,false,0,0,0,&si,&pi))
    		{
    			cout << "Fehler";
    			return 0;
    		}
    	WaitForSingleObject(pi.hProcess,6000);
    	CloseHandle(pi.hThread);
    	cout << "OK";
    
    	return 0;
    }
    

    Nur würde ich gerne wissen, wie ich nun statt der direkten Pfadangabe bei CreateProcess die Variable "app" einfügen kann.
    Wenn ich sie direkt angebe, erhalte ich den Fehler:
    Konvertierung des Parameters 2 von 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' in 'char *' nicht moeglich

    Hat jemand einen Tipp?



  • versuch's mal mit "app.c_str()" - das liefert den Inhalt des Strings als "const char*".



  • ... und dann schau dir noch bei WFSO die Returnwerte an und wie du sie auswertest und schon sollte alles klappen



  • Hi,

    wenn ich c_str() verwende erhalte ich deh fehler:
    Konvertierung des Parameters 2 von 'const char *' in 'char *' nicht moeglich



  • *args* *schaut sich die Dokumentation der Funktion an - "The Unicode version of this function, CreateProcessW, can modify the contents of this string." - also klappt das mit string nicht wirklich.

    Wieos gibst du den App-Namen eigentlich nicht im ersten Parameter an?


Anmelden zum Antworten