exe programm schliessen



  • ich denke die überschrift sagt schon das meiste...
    soweit mal mein ansatz:

    #include <windows.h>
    #include <tchar.h>
    #include <stdio.h>
    
    int _tmain()
    {
        HANDLE h;
        WIN32_FIND_DATA fd;
        memset(&fd, 0, sizeof(fd));//nowendig???
        const TCHAR* path="C:\\test.exe";//läuft im moment!
    
        if((h=FindFirstFile(path, &fd))==INVALID_HANDLE_VALUE)
            return 1;
    
        printf("%s erfolgreich geschlossen!", fd.cFileName);
        return 0;
    }
    
    //test.c
    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
       system("pause");
       return 0;
    }
    

    FindClose() gibt TRUE zurück, die Datei ist allerdings weiterhin geöffnet, wie muss ichs aber sonst machen?

    vielen dank im voraus 🙂



  • ups hab den quellcode jetzt einfach mal so aus dem kopf niedergeschrieben, es fehlt natürlich noch das

    FindClose(h);
    

    🕶



  • return 0 bedeutet, daß entweder eine Datei oder ein Ordner namens test.exe im Verzeichnis "C:\" existiert. Mehr nicht. Du willst wahrscheinlich darauf hinaus, ob das Konsolenprogramm "main.exe" noch läuft.



  • @jimmy3: Also ich weiß nicht genau was Du vor hast, da Dein Code nicht ansatzweise zu Deinem Thread-Titel passt...aber wenn es Dir darum geht ein laufendes Programm zu beenden (und nicht nach irgendeiner Datei zu suchen), guck Dir das mal an: Terminating a Process.



  • CodeFinder schrieb:

    @jimmy3: Also ich weiß nicht genau was Du vor hast, da Dein Code nicht ansatzweise zu Deinem Thread-Titel passt...

    ich habe die funktion CloseHandle in der MSDN gefunden (http://msdn2.microsoft.com/en-us/library/ms724211.aspx), die verwendet werden kann um Threads, Prozesse etc. zu schliessen. Sie nimmt als Parameter ein HANDLE. deshalb die funktion FindFirstFile() die mir ein handle auf die datei zurückgibt. dort steht aber weiter: dieses handle muss der rückgabewert von CreateFile() sein - erhält man es stattdessen von FindFirstFile() soll man FindClose(HANDLE) verwenden.

    CodeFinder schrieb:

    aber wenn es Dir darum geht ein laufendes Programm zu beenden (und nicht nach irgendeiner Datei zu suchen), guck Dir das mal an: Terminating a Process.

    Vielen Dank soetwas hatte ich gesucht! kenn mich mit threads aber praktisch kaum aus, kennt da jemand ein gutes tut?



  • jimmy3 schrieb:

    ich habe die funktion CloseHandle in der MSDN gefunden (http://msdn2.microsoft.com/en-us/library/ms724211.aspx), die verwendet werden kann um Threads, Prozesse etc. zu schliessen. Sie nimmt als Parameter ein HANDLE. deshalb die funktion FindFirstFile() die mir ein handle auf die datei zurückgibt. dort steht aber weiter: dieses handle muss der rückgabewert von CreateFile() sein - erhält man es stattdessen von FindFirstFile() soll man FindClose(HANDLE) verwenden.

    CloseHandle schließt aber NUR den Handle, nicht den damit verbundenen Thread/Prozess/etc. . Du kannst bspw einen Thread erstellen und anschließend den zurückgegebenen Handle sofort wieder killen ( ➡ CloseHandle), das stört den Thread überhaupt nicht.

    jimmy3 schrieb:

    kenn mich mit threads aber praktisch kaum aus, kennt da jemand ein gutes tut?

    Guck Dich hier mal um: http://www.codeproject.com/threads/ 😉 .



  • gibt es dann auch eine möglichkeit wie prozess a ein prozesshandle von prozess b erhält?



  • jimmy3 schrieb:

    gibt es dann auch eine möglichkeit wie prozess a ein prozesshandle von prozess b erhält?

    OpenProcess.



  • ne ich meine wenn beide prozesse schon laufen, damit prozess a prozess b beenden kann...


Log in to reply