Prozess beenden ""ohne Handel""



  • In meinem Forumspost findest du im -fast- letzten Beitrag den Namen "PostThreadMessage" und schon x-Tausend fehlversuche (die passenden Codes) mit denen ich versucht habe, einen Prozess zu beenden.

    Wenn du mal eine Möglichkeit finden solltest melde dich per PN, ich such auch noch.



  • @Marc: Den Prozess von außen zu beenden ist nicht empfehlenswert (vor allem mit der Holzhammer-Methode) - das solltest du nur dann machen, wenn er gerade dabei ist, deinen Rechner zu pulverisieren. Ansonsten ist es die beste Lösung, du bittest ihn höflich darum, sich zu beenden.
    (aber dazu gibt es keine Standardlösung, also mußt du schon wissen, worauf das Zielprogramm reagieren würde)

    PS: Wenn du keinen Prozess-Handle zur Verfügung hast, wie identifizierst du dann dein Zielprogramm?



  • Marc_c schrieb:

    D.h. ich habe keinen
    Möglichkeit an das Hanbdel zu kommen über
    CreateProzess() oder ShellExecuteEX() im herkömmlichen
    Sinne.

    Gut ich hatte gelese

    Oli dachte Marc_c schrieb:

    Ich habe ein CreateProzess() oder ShellExecuteEX() im herkömmlichen Sinne.

    Naja, da kann ich dir wohl nicht helfen sry.



  • Meinen Rechner zu pulverisieren. Hmm mag seltsam klingen
    aber etwas der Art hat der Prozess vor. Die Applikation
    selber ist von mir könnte also einen Interpreter für eine
    solche "Bitte" sich zu beenden einbauen.

    Es geht sich darum das der Prozess auf auf jeden Fall beendet
    werden muss wenn gewisse randkriterien (hat nichts mit dem
    Prozess zu tun der beendet werden soll) erfüllt sind.
    Dann würde auch der Holzhammer reichen. Komme was wolle so zu sagen.

    Der Prozess selber überwacht meine sensiblen Daten. Treffen
    jedoch A und B zusammen muss der Prozess auf jeden Fall von außen
    (einem anderen Programm) beendet werden.

    Randbedingung ist es das die Überwachung unabhängig in einem anderen
    Prozess/Anwendung stattfindet. Also muss ich es irgendwie hin bekommen.

    Es sind keine "File-Hooks" auf meine Daten da also egal wie ich den
    Prozess beende ich würde Sie nicht in Gefahr bringen wenn ich den
    Prozess "unsauber" beende.

    Hätte nicht gedacht das es so schwierig wird einen Prozess zu beenden
    wenn ich ehrlich bin 😉

    Würde ich also den Prozess bitten sich zu beenden müsste ich also
    mit SendMessage() arbeiten oder?

    Wie gesagt ich habe auf beide Quellcodes vollen zugriff.



  • Was ist denn so gefährlich daran, wenn dein Programm A beobachten kann, was dein Programm B gerade machen will?

    Aber wenn du in der Lage bist, beide Programme anzupassen, brauchst du den Holzhammer bestimmt nicht. Du mußt dir nur eine Nachricht anlegen, über die sie miteinander kommunizieren können (RegisterWindowMessage()) und dann in Programm A darauf reagieren, daß diese Nachricht ankommt. Programm B sendet diese Nachricht, nachdem es den Störenfried entdeckt hat (oder prophylaktisch an alle Fenster) und hofft anschließend auf das beste.



  • Trotzdem würde mich die Holzhammer Methode ebenso interessieren.

    Unter welchen Stichwörtern kann ich mich erkundigen wie ich
    die Variante via "RegisterWindowMessage()" realisiere?

    P.S. ich lese da was von 'Window' heißt das soviel wie das
    etwas an die Form sende? Die existiert nämlich nicht.
    Beide Anwendungen sind nur Prozesse und keine Form-Anwendungen



  • Marc_C schrieb:

    P.S. ich lese da was von 'Window' heißt das soviel wie das
    etwas an die Form sende? Die existiert nämlich nicht.
    Beide Anwendungen sind nur Prozesse und keine Form-Anwendungen

    Wenn du keine Fenster hast, nehmen die Programme höchstwahrscheinlich auch keine Fensternachrichten entgegen. Da müsstest du dir eine eigene Synchronisation aufbauen, z.B. auf Basis von Events und Mutexes.
    (aber darum hatte ich ja vorhin gefragt, auf welche Art du das zu beendende Zielprogramm findest)

    PS: Für die Holzhammer-Methode (TerminateProcess()) benötigst du den Prozess-Handle.



  • Hmm ich hätte jetzt gesagt über den Prozessnamen ohne tiefer darüber nachzudenken.
    Ich kann die WinAPI ja dazu überreden mir alle aktiven Prozesse anzeigen zu lassen
    und da interpretiere ich jetzt hinein dann bekomme ich auch den "Prozessnamen"

    Ich glaube da würde ich vorher noch eine Socketverbindung aufbauen 🙂
    Da kenne ich mich wenigstens mit aus... obwohl mir da wieder Begriffe wie Firewall
    einfallen die mich da stören würden. Wo ich viel testen müsste.

    Kann ich mir das Handel nicht über den Prozessnamen holen? Virenscanner können das ja auch 🙂



  • Hmm unter UNIX/Linux könnte man den Prozess einfach über die PID kicken
    und an die zukommen ist ja recht einfach. Es muss doch eine Möglichkeit geben unter Windows anhand des Prozessnamens den Prozess zu "kicken".





  • Sorry, weiß nicht, ob dir das was hilft, aber unter der Konsole (ja bin ein "alter" Konsolenfreak (16 Jahre)) konnte ich immer mit einem gewissen Befehl (k.A. wie der noch lautete) einen Befehl starten. Da du nun ja Zugriff auf den Quelltext hast, öffnest du einfach ein Microsoft Utility namens "kill", musst e mal googeln. Den kopierst in c:\windows\system32, das übliche halt. Dem gibste dann den Parameter -f (force) mit, und da du ja den Programmnamen weißt (hast ja du programmiert) kannste nun das Programm zwingen.

    Ich glaube, das ist zwar nicht genaus das was du gesucht hast, wäre aber vielleicht eine Möglichkeit!



  • geeky schrieb:

    http://msdn2.microsoft.com/en-us/library/ms682623(VS.85).aspx

    Na das sieht auf den ersten Blick doch gut aus.
    Werde mir das Morgen mal zu Gemüte führen 🙂

    thx


Anmelden zum Antworten