Announcement

Collapse
No announcement yet.

Prozess beenden

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Prozess beenden

    Hallo,<br>
    wie kann ich einen Prozess beenden?<br>
    Auf einem Server liegt eine exe und eine Datenbank(Access), insofern einer auf die Datenbank über die exe zugreift kann ich die exe nicht überschreiben. Ich muß die exe radikal beenden also dem user den Boden unter den Füsen wegziehen.<br>
    Es muß eine Funktion dafür geben oder?<br>
    Gruß Michael.

  • #2
    Hallo Michael,

    zuerst mußt Du die Prozeß-ID ermitteln. Mit der kannst Du dann die API-Funktion "ExitProcess" aufrufen. Mit dieser werden alle Threads und angehängten DLL´s gekillt.

    Gruß Roma

    Comment


    • #3
      Super,<br>
      wenn du mir noch sagst wie ich die Prozes ID kriege binn ich sehr glüklich.<br>
      Gruß Michae

      Comment


      • #4
        Es wird mit ExitProcess nicht funktionieren. Um fremde Prozesse zu schließen benutzt man die Win32-API-Funktion TerminateProcess. Nachteil: Die von diesem Prozess benützten DLL’s erfahren nicht, dass der Prozess beendet wurde, was zu Problemen führen kann.

        Gruß Pete

        Comment


        • #5
          function killExtProcess (inProcessName : String) : boolean;
          { beendet den als Parameter übergebenen Prozess. Als
          Parameter ist der Name der zugehörigen ausführbaren
          Datei, am besten mit Pfad, zu übergeben.
          ACHTUNG: Es wird die Funktion TerminateProcess eingesetzt!
          uses: Windows, TlHelp32 }
          var
          snapshot,
          procHandle : THandle;
          procEntry : TProcessEntry32;
          begin
          killExtProcess := false;
          snapshot := CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);
          procEntry.dwSize := sizeOf(procEntry);
          if Process32First(snapshot, procEntry) then
          repeat
          until (pos(inProcessName, procEntry.szExeFile) > 0) or
          not Process32Next(snapshot, procEntry);
          if pos(inProcessName, procEntry.szExeFile) > 0 then
          begin
          procHandle := OpenProcess(PROCESS_TERMINATE, false,
          procEntry.th32ProcessID);
          if procHandle <> 0 then
          begin
          if TerminateProcess(procHandle, 0) then
          killExtPRocess := true;
          CloseHandle(procHandle)
          end
          end;
          CloseHandle(snapshot)
          end; // killExtProces

          Comment


          • #6
            Ein Beispiel zu TerminateProcess findest du auf der Seite http://rad.bytesandmore.de/cpp/snipp/sc03014.php. Ich muss mich der Anmerkung von Peter, dass es je nach zu terminierneden Anwendung zu Problemen führen kann, anschliessen. Es ist aber auch recht selten der Fall. Um die Anwendung kontrolliert zu beenden kannst du ihr WM_CLOSE senden (Beispiel enefalls auf der Seite), in diesem Fall darf das Programm allerdings keine "Schließ-Rückfragen" stellen.

            regards
            serg

            Comment


            • #7
              Ein Beispiel zu TeminateProcess:
              <BR>
              <BR>
              <B>function</B> killExtProcess (inProcessName : <B>String</B>) : boolean;<BR>
              { beendet den als Parameter übergebenen Prozess.<BR>
              &nbsp;&nbsp; Als Parameter ist der Name der zugehörigen ausführbaren Datei (mit/ohne Pfad) zu übergeben.<BR>
              &nbsp;&nbsp; ACHTUNG: Es wird die Funktion TerminateProcess eingesetzt! uses: Windows, TlHelp32 }<BR>
              &nbsp;&nbsp; <B>var</B><BR>
              &nbsp;&nbsp; snapshot,<BR>
              &nbsp;&nbsp; procHandle : THandle;<BR>
              &nbsp;&nbsp; procEntry : TProcessEntry32;<BR>
              <B>begin</B><BR>
              &nbsp;&nbsp; killExtProcess := false;<BR>
              &nbsp;&nbsp; snapshot := CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);<BR>
              &nbsp;&nbsp; procEntry.dwSize := sizeOf(procEntry);<BR>
              &nbsp;&nbsp; <B>if</B> Process32First(snapshot, procEntry) <B>then</B><BR>
              &nbsp;&nbsp; <B>repeat</B><BR>
              &nbsp;&nbsp; <B>until</B> (pos(inProcessName, procEntry.szExeFile) > 0) <B>or not</B> Process32Next(snapshot, procEntry);<BR>
              &nbsp;&nbsp; <B>if</B> pos(inProcessName, procEntry.szExeFile) > 0 <B>then</B><BR>
              &nbsp;&nbsp; <B>begin</B><BR>
              &nbsp;&nbsp;&nbsp;&nbsp; procHandle := OpenProcess(PROCESS_TERMINATE, false, procEntry.th32ProcessID);<BR>
              &nbsp;&nbsp;&nbsp;&nbsp; <B>if</B> procHandle <> 0 <B>then</B><BR>
              &nbsp;&nbsp;&nbsp;&nbsp; <B>begin</B><BR>
              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <B>if</B> TerminateProcess(procHandle, 0) <B>then</B><BR>
              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp ; killExtProcess := true;<BR>
              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CloseHandle(procHandle)<BR>
              &nbsp;&nbsp;&nbsp;&nbsp; <B>end</B><BR>
              &nbsp;&nbsp; <B>end</B>;<BR>
              &nbsp;&nbsp; CloseHandle(snapshot)<BR>
              <B>end</B>; // killExtProcess<BR&gt

              Comment

              Working...
              X