Prozess per Prozess Beschreibung schließen und nicht per Prozess Name.

  • VB.NET

Es gibt 47 Antworten in diesem Thema. Der letzte Beitrag () ist von Fakiz.

    Dfgpoint schrieb:

    ich denke mal
    Ebenfalls Klasse. :whistling:
    Woher kennt Dein Programm den Text, der da irgendwo in einer TextBox steht und den Du dann der Prozess-Instanz zum Löschen übergibst?
    Liest Du Dateieigenschaften aus?
    Ich denke nicht.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:

    Klasse. :thumbsup:
    Bei mir steht da merkwürdigerweise "Roulade mit Klößen" drinne.


    Super, nun habe ich hunger.

    Update #1: @Dfgpoint Also ich muss sagen, die Idee hat mich gestern dazu gebracht mir einen kleinen HotKey-Taskkiller zu schreiben, weil ab und an die Spiele bei mir so crashen, dass gar nichts mehr geht. Da geht dann nur noch ein Taskkill /F. - Bei mir klappt alles wie es soll und auch die Methode, welche ich dir gestern geschrieben habe, funktioniert. Das einzige was du da noch haben kannst, ist ein "Access denied" Problem, aber da kannst du dich ja ran machen. Verstehe das Problem nicht mehr ganz :) - Eigentlich versteht Rod die Dinge immer ganz gut und ist echt ein Fuchs. Vielleicht hat er einfach Hunger oder so. - Dein erster Post sowie die Überschrift ist auch immer noch unübersichtlich. Ein wenig Mitarbeiten :)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Toorms“ ()

    So isser halt, der Rod...

    Das Problem bei dem Lösungsvorschlag aus dem zweiten Post ist, dass hier alle laufenden Prozesse durchlaufen werden um deren Beschreibung mit dem vorgegebenen Text zu vergleichen. Dazu wird bei jedem der laufenden Prozesse auf die Eigenschaft MainModule zugegriffen, und die löst bei ein paar der auf deinem System laufenden Prozesse eine SecurityException aus, weil du eben einfach keinen Zugriff darauf hast. Das hat nichts mit dem Prozess zu tun, den du eigentlich suchst (Opera), sondern mit einem anderen, der geschützt ist, und in der Auflistung aller Prozesse aus GetProcesses ebenfalls auftaucht.
    Bei mir kommt die Exception auch, und zwar bei einem Prozess namens "RouterNT" (Windows 10).
    Lösen kann man das Problem, wenn man den Zugriff auf MainModule in einem eigenen Try-Catch abfängt:

    VB.NET-Quellcode

    1. Try
    2. Dim objFileDesc As String = "Your Descr." ' //also Textbox1.Text
    3. For Each objProcess As Process In Process.GetProcesses
    4. Dim mmod As ProcessModule = Nothing
    5. Try
    6. mmod = objProcess.MainModule
    7. Catch
    8. End Try
    9. If mmod IsNot Nothing Then
    10. If objFileDesc = mmod.FileVersionInfo.FileDescription Then
    11. objProcess.Kill()
    12. End If
    13. End If
    14. Next
    15. Catch ex As Exception
    16. MessageBox.Show(ex.ToString)
    17. End Try
    Weltherrschaft erlangen: 1%
    Ist dein Problem erledigt? -> Dann markiere das Thema bitte entsprechend.
    Waren Beiträge dieser Diskussion dabei hilfreich? -> Dann klick dort jeweils auf den Hilfreich-Button.
    Danke.

    RodFromGermany schrieb:

    Roulade mit Klößen


    Das ist doch OK. Dann sollen alle Prozesse beendet werden die "Roulade mit Klößen" als Beschreibung haben.
    Was genau ändert die Information woher der Text kommt an der möglichen Lösung?
    Im Zweifel gehe ich hier einfach davon aus das er per Hand eingegeben wurde.
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."

    Dfgpoint schrieb:

    Ich glaub du verstehst 0 mein Problem
    Ist es denkbar, dass Du eine sehr präzise Frage zu Deinem Problem nicht beantworten kannst, weil Du nur das Bild Deines Problems siehst, nicht aber das Problem selbst?
    Noch mal die einfache Frage:
    Wie kommt Dein Programm zu dem String "Opera Internet Browser"?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:

    Noch mal die einfache Frage:
    Wie kommt Dein Programm zu dem String "Opera Internet Browser"?
    Nochmal die einfache Antwort: Das ist für die Problemstellung komplett irrelevant.

    Schamash schrieb:

    Im Zweifel gehe ich hier einfach davon aus das er per Hand eingegeben wurde.

    Weltherrschaft erlangen: 1%
    Ist dein Problem erledigt? -> Dann markiere das Thema bitte entsprechend.
    Waren Beiträge dieser Diskussion dabei hilfreich? -> Dann klick dort jeweils auf den Hilfreich-Button.
    Danke.

    Arby schrieb:

    Das ist für die Problemstellung komplett irrelevant.
    Hättest Du mal lieber gefragt, warum ich das wissen will.
    Öffne mal den TaskManager und sieh Dir die geöffneten Prozesse an, da gibt es die Spalte "Beschreibung".
    Die hat der TE möglicherweise ausgelesen. Und wenn er das getan hat, muss er bereits die entsprechende Process-Instanz in der Hand gehabt haben.
    Das hätte Dir eigentlich auffallen müssen, da Du in Deinem Code darauf zugreifst.
    Selbstverständlich kannst Du dem TE seinen Code fertig machen, nur hat dieser dabei absolut nix gelernt.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Tja, ich bin nicht als 80er-Jahre-Lehrer hier, sondern um zu helfen. Ob der TE aus der Hilfestellung was lernt oder nicht, liegt in seiner Verantwortung. Nicht in meiner.
    Wenn es dir schon darum ging, aufzuzeigen, dass seine Art, wie er darauf gekommen ist, nach dem Text "Opera Browser" (oder was auch immer) zu suchen, Parallelen dazu haben kann, wie man mit Hilfe der Process-Klasse diesen Test wiederfinden kann, dann formulier es doch auch so.
    Aber es ändert nichts daran, dass sein Problem schließlich nicht mehr war, den richtigen Prozess zu finden, sondern dass auf der Suche nach dem richtigen Prozess etwas ganz anderes schief lief, was ihn auf dem eigentlich schon bekannten Weg an der Erreichung des Ziels hinderte.
    Weltherrschaft erlangen: 1%
    Ist dein Problem erledigt? -> Dann markiere das Thema bitte entsprechend.
    Waren Beiträge dieser Diskussion dabei hilfreich? -> Dann klick dort jeweils auf den Hilfreich-Button.
    Danke.
    Jetzt atmen wir mal tief durch und gut ist. Dazu finde ich es aber auch nicht sonderbar toll, wenn man dem TE mehrfach schreibt, er solle doch bitte den first Thread sowie den Titel besser beschreiben, damit dieser von anderen später auch gefunden und verstanden wird. Diese können ja ggf. das gleiche Problem haben, wie er. - Mitarbeit ist hier das Stichwort.

    Ihm da einfach einen Code hinzuzaubern, ja. Jeder so wie er es mag. Ich bin auch noch von der Schule, dass man zwar helfen kann, derjenige welcher Hilfe braucht, aber auch gerne seinen Kopf mit anstrengen darf und nicht einfach darauf wartet, dass jemand seinen Code schreibt.

    Ich glaube Rod meinte nicht, wo der String geschrieben wird, sondern wo er weggeholt wird. Also auf welchen String sich da bezogen wird. Aber nunja. Der Code von Arby geht natürlich auch. Wobei du sicherheitshalber das Programm als Administrator starten solltest oder aber in der app.manifest "<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />" angibst.
    Poste mal bitte deinen Code vom frmMain.vb (Form1.vb) (mit Highlights)

    Update #1: Versuche mal die Anwendung nur zu "erstellen", dann in den Debug Ordner gehen > Rechtsklick "Run as Administrator". Wenn du den requireAdministrator in der Manifest eingestellt hast und VS2010 nicht als Administrator ausführst, kannst du nicht debuggen, da zum debuggen höhere Rechte gebraucht werden!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Toorms“ ()

    Ich meinte eher welche Codezeile, aber gut. Ich hab einfach den Code selbst ausprobiert und der Fehler entsteht bei dem ersten Try-Catch-Block. Kannst ja mal einen Haltepunkt setzten und den Wert von mmod untersuchen.

    Edit: Ich habe ein Bild mit der Fehlermeldung eingestellt, die das Problem gut darstellt. Bei manchen Prozessen ist mmod = nothing und bei manchen nicht. TE möchte wohl einen Prozess beenden, bei dem mmod = nothing ist, daher wird der Prozess nie beendet und selbst wenn objProcess.Kill() erreicht wird, wird der Prozess aus irgendeinem Grund nicht beendet (trotz <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />).
    Bilder
    • 7578d9a6826dd85b8d28069563a2669f.png

      42,01 kB, 954×630, 65 mal angesehen

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „TheVBTutorialsVB“ ()