Programm nach Start sofort wieder beenden



  • Hallo,

    möchte gerne ein kleines Programm schreiben, welches ein gestartetes Programm nach Start sofort wieder beendet.

    Meine Überlegung geht in die Richtung, die Windows Prozessliste auszulesen und das betreffende Programm bei einem Treffer zu beenden.

    Nun bin ich mir nicht sicher, welche WinApi-Funktionen man dafür benötigt.
    Kann mir da jemand weiterhelfen?



  • Willst du es "höflich" beenden, oder einfach abschiessen?
    Zum Abschiessen kannst du einfach TerminateProcess() verwenden.
    Höflich beenden ist schwieriger.

    Und Prozesse auflisten kannst du mit Hilfe der "Tool Help" Funktionen:
    http://msdn.microsoft.com/en-us/library/windows/desktop/ms686832(v=vs.85).aspx



  • BTW: Du kannst auch einfach nen Registry-Eintrag setzen der dafür sorgt dass statt dem Programm ein anderes Programm gestartet wird.

    Dazu erzeugst du nen Registry-Key namens

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\ProgrammName.exe

    Und legst da drin ne REG_SZ Value namens Debugger an, die auf den Pfad des Programmes zeigt dass du statt dessen gestartet haben willst. Tadaa.



  • hustbaer schrieb:

    BTW: Du kannst auch einfach nen Registry-Eintrag setzen der dafür sorgt dass statt dem Programm ein anderes Programm gestartet wird.

    Dazu erzeugst du nen Registry-Key namens

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\ProgrammName.exe

    Und legst da drin ne REG_SZ Value namens Debugger an, die auf den Pfad des Programmes zeigt dass du statt dessen gestartet haben willst. Tadaa.

    Igittigitt!



  • Naja eigentlich finde ich das ziemlich cool!

    Den Key kann man ja schliesslich nur als Administrator bearbeiten. Und als Administrator gibt's genug andere Wege phöses zu tun.

    Das einzige was mich da dran stört ist dass man nur den Filenamen angeben kann, und nicht den vollständigen Pfad. Zumindest wüsste ich nicht wie man auf den vollständigen Pfad oder sonstige Eigenschaften (Version-Tag, CRC - was auch immer) einschränken könnte.

    ps: Notepad2 verwendet das in seinem Installer um notepad.exe "auszutauschen". Ohne das File ersetzen zu müssen (Problematisch wegen dem Windows System-File Check) oder alle Einträge die auf Notepad.exe verweisen umschreiben zu müssen (was dann auch wieder nur ne halbe Lösung wäre, weil viele Programme halt direkt Notpad rausstarten).

    pps: Ich muss direkt mal ausprobieren ob das für Taskman.exe etc. auch funktioniert 🙂



  • Schön das du trotz des einen Wortes verstanden hast, was ich zum Ausdruck bringen wollte 😃

    Wenn du das verwendest empfinde ich das als angmessen, da du weißt, was dann im System passiert. Als magic bullet und/oder Hilfestellung lehne ich das persönlich ab, da - zumindest ich nicht - einschätzen könnte, ob der Hilfesuchende das gleiche Wissen hat oder haben will (ohne alfdjsadölfj zu nahe treten zu wollen). Im Zweifel wäre das also ein ziemlich schlechter Programmierstil, es gleicht aus meiner Sicht schon fast einer Vergewaltigung (die Funktionalität ist schließlich zum Debuggen gedacht, man könnte verharmlosend auch von Missbrauch sprechen). Auf Notepad bezogen, amüsiert mich diese Vorstellung wiederum, da Microsoft sich also selbst vergewaltigt :p



  • hustbaer schrieb:

    pps: Ich muss direkt mal ausprobieren ob das für Taskman.exe etc. auch funktioniert 🙂

    SysInternals ProcessExplorer macht das genauso bei seinem "Replace Task Manager".

    Gruessle



  • Fake oder Echt schrieb:

    Im Zweifel wäre das also ein ziemlich schlechter Programmierstil

    Kommt auch drauf an würde ich sagen.
    Wenn man sowas ohne Not oder sehr guten Grund in einem Programm verwendet welches man Endusern zur Verfügung stellt, dann ja.
    Wenn's nen guten Grund gibt, wie eben bei z.B. Notepad2, dann finde ich es nicht schlimm. Oder wenn man es nur gezielt auf dem eigenen System einsetzt. Oder (auch wieder mit guten Grund) für das eine oder andere "in house" Projekt.

    Fake oder Echt schrieb:

    die Funktionalität ist schließlich zum Debuggen gedacht, man könnte verharmlosend auch von Missbrauch sprechen

    Jo klar könnte man.
    Aber daran dass der grösste Nutzen von etwas nicht das ist wofür es ursprünglich gedacht war bin ich mittlerweile schon so gewöhnt, das fällt mir kaum noch auf.

    @stuxn
    Cool, danke für die Info!



  • Nochmal ein bischen Offtopic:

    Autoruns (auch von SysInternals) listet auch alle "Image Hijacks" auf.
    Autoruns - taskmgr.exe hijack

    Gruessle



  • hustbaer schrieb:

    Kommt auch drauf an würde ich sagen.

    Daher meinte ich ja auch im Zweifel 😉

    hustbaer schrieb:

    Jo klar könnte man.
    Aber daran dass der grösste Nutzen von etwas nicht das ist wofür es ursprünglich gedacht war bin ich mittlerweile schon so gewöhnt, das fällt mir kaum noch auf.

    Sicherlich ist das normal. Besonders was systemrelevante Dateien angeht, bin ich aber kein Freund davon, die schnellste und einfachste Lösung zu nutzen. Viele Programmierer (sowohl Hobbyisten als auch Gewerbsmäßige) machen sich nur leider viel zu wenig Gedanken darüber, was mit deren Eingriffen passiert, nachdem die Anwendung deinstalliert bzw. deren Programm ohne Installationsroutine schlicht und einfach nicht mehr genutzt wird. Übrig bleiben Datenleichen noch und nöcher und im schlimmsten Fall reagiert das System bei gewünschten Aktionen nur noch verweigernd. In diesem Fall: Was passiert mit dem Registry-Eintrag nach Löschung der Anwendung? Die Antwort ist eigentlich klar, dass daran bei der Umsetzung gedacht wird, wage ich in einigen Fällen aber zu bezweifeln. Daher immer abwägen 👍

    PS: Das ging weniger an dich, auftretend als Moralapostel missioniere ich Programmierer zu einem gedankenvollen Umgang mit fremden Systemen (ohne Erfolg). 🙄 :p





  • @WishfulThinking
    Nein, dort wäre keine Lösung.
    Hast du diesen Beitrag überhaupt gelesen? 🙄



  • Wenn ein Programm auf meinem Computer startet wo ich nicht will das es startet dann werfe ich meinen Computer weg und kaufe mir einen neuen.



  • hustbaer schrieb:

    Willst du es "höflich" beenden, oder einfach abschiessen?
    Zum Abschiessen kannst du einfach TerminateProcess() verwenden.
    Höflich beenden ist schwieriger.

    Und Prozesse auflisten kannst du mit Hilfe der "Tool Help" Funktionen:
    http://msdn.microsoft.com/en-us/library/windows/desktop/ms686832(v=vs.85).aspx

    hustbaer schrieb:

    BTW: Du kannst auch einfach nen Registry-Eintrag setzen der dafür sorgt dass statt dem Programm ein anderes Programm gestartet wird.

    Dazu erzeugst du nen Registry-Key namens

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\ProgrammName.exe

    Und legst da drin ne REG_SZ Value namens Debugger an, die auf den Pfad des Programmes zeigt dass du statt dessen gestartet haben willst. Tadaa.

    Beide Tips helfen mir weiter, thx!


Anmelden zum Antworten