.exe-Datei aus einer Anwendung heraus starten



  • Hallo,

    meine Anwendung soll nach Beendigung ihrer Aufgabe eine zweite Anwendung
    aufrufen, die als .exe-Datei vorliegt. Beide wurden mit C++Builder6 ge-
    schrieben und sollen unter win2000 laufen.

    Gibt es da sowas wie WinExec o.ä. mit dem ich das bewerkstelligen kann?

    Danke im Voraus

    Guido



  • Hallo,

    siehe FAQ

    Ciao



  • Hallo,

    danke, die Beispiele und Erklärungen in der FAQ waren gut. Leider passiert da bei mir nichts 😢 So sieht mein Code aus:

    // Diese Klasse ist von TService abgeleitet
    void __fastcall TService1::ServiceExecute(TService *Sender)
    {
       while(!Terminated) {
         ServiceThread->ProcessRequests(false);
         int ret = (int)ShellExecute(0, "open", "TestProject.exe",
                                     0, 0, SW_SHOWNORMAL);
         if(ret <= 32) {
           ServiceThread->Terminate();
         }
         else Sleep(2000);
       }
    }
    

    Das Programmle "TestProject.exe" macht nichts weiter, als die Uhrzeit in eine Datei schreiben. Kann es sein, dass soetwas in einer Service-Anwendung prinzipiell nicht geht?

    Danke im Voraus

    Guido



  • WinExec("C:\\Meine_Andere_EXE.exe",SW_SHOWNORMAL)
    

    OK?



  • Hallo,

    es funktioniert auch mit ShellExecute(...) wenn man den kompletten Programmpfad mit angibt. Gibt's da auch eine Methode um das Programm wieder zu beenden?

    TIA Guido



  • Hallo

    entweder das entstandene Fenster mit FindWindow suchen und eine Message zum Schließen schicken, oder anstatt ShellExecute() dann ShellExecuteEx() nehmen und den dort erhaltenen Prozeßhandle in TerminateProcess() verwenden.

    bid bald
    akari



  • Hallo,

    erstmal Danke fuer eure Tipps. Ich habe jetzt das Loeschen einer laufenden Anwendung wie folgt geloest:

    // myProgramm ist myProgramm.exe!
      HWND wHandle = ::FindWindow(NULL, "myProgramm");
    
      unsigned long pId = 0L;
      if (wHandle != NULL) {
        GetWindowThreadProcessId(wHandle, &pId);
      }
    
      HANDLE pH = OpenProcess(PROCESS_TERMINATE, 0, pId);
      if (TerminateProcess(pH, 0)) {
        wHandle = 0;
      }
    

    Funktioniert jedenfalls 😉

    Gruss Guido


Anmelden zum Antworten