Visual Basic .NET Process Kill

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von BattleMaker.

    Visual Basic .NET Process Kill

    Hallo,

    habe heute versucht, mit Visual Studio .NET ein Programm zu entwickeln, welches die laufenden Prozesse auflistet, um ungewünschte Tasks killen zu können. Mein Code ist so aufgebaut, dass die wesentlichen Funktionen in einer eigenen .dll ausgelagert sind. Somit ist die Oberfläche von den eigentlichen Systemfunktionen getrennt. Wenn ich das Programm in Visual Studio debuggen lasse, läuft alles einwandfrei, sobald ich jedoch die fertige Binary starte, kann mein Process Kill manche Tasks terminieren und andere nicht. Warum funktioniert es im Debugger und in der fertigen .exe nicht? Vermute, dass das Binary nicht den notwendigen Zugriff auf die Prozesse bekommt (obwohl aufgelistet). Wäre für Anregungen dankbar. Werde morgen mal den Code posten.
    Hi, Sidious.

    Ich muss zugeben, dass ich kein einziges Fitzelchen Vb.Net beherrsche, aber möglicherweise liegt es ja daran, dass die Tasks, die es zur Laufzeit nicht löschen kann, Systemprozesse sind, auf die Windows zugreift? Oder funktioniert das auch bei unwichtigen Prozessen (wie Winamp, ICQ, etc.) nicht?

    mfG,

    Malcolm

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

    Habe immer noch nicht begriffen, warum das Programm scheinbar durch den Debugger in einem anderen Sicherheits Kontext abläuft. Weiß jemand Rat? Der Vollständigkeit halber hier der Code:

    <code>
    Imports System.Diagnostics.Process

    Public Class ProcessFunction

    Shared CurrentProcess As Process
    Shared CurrentProcesses As System.Diagnostics.Process

    Public Shared CurrentProcessIDs(255) As Integer
    Public Shared CurrentProcessNames(255) As String

    Public Shared ProcessCount As Integer

    Public Shared ReturnCode As Integer = 0

    Public Shared Function GetCurrentProcesses() As Object

    ' ReturnCode zurücksetzen

    ReturnCode = Nothing

    ' ProcessCount zurücksetzen

    ProcessCount = -1

    Try

    ' Auflistung aller aktiven Prozesse

    For Each CurrentProcess In CurrentProcesses.GetProcesses

    If Not LCase(CurrentProcess.ProcessName) = "idle" Then

    ProcessCount = ProcessCount + 1

    CurrentProcessIDs(ProcessCount) = CurrentProcess.Id
    CurrentProcessNames(ProcessCount) = LCase(CurrentProcess.ProcessName)

    End If

    Next CurrentProcess

    ReturnCode = 0
    Return ReturnCode

    Exit Function

    Catch

    ReturnCode = 10240
    Return ReturnCode

    Exit Function

    End Try

    End Function

    Public Shared Function KillCurrentProcess(ByVal ProcessID As Integer, ByVal ProcessName As String) As Object

    ' ReturnCode zurücksetzen

    ReturnCode = Nothing

    ' ProcessCount zurücksetzen

    ProcessCount = -1

    Try

    ' Auflistung aller aktiven Prozesse

    For Each CurrentProcess In CurrentProcesses.GetProcesses

    If Not LCase(CurrentProcess.ProcessName) = "idle" Then

    ProcessCount = ProcessCount + 1

    CurrentProcessIDs(ProcessCount) = CurrentProcess.Id
    CurrentProcessNames(ProcessCount) = LCase(CurrentProcess.ProcessName)

    End If

    ' Nach angegebener PID suchen

    If ProcessID >= 0 Then

    If CurrentProcessIDs(ProcessCount) = ProcessID Then

    ' Prozess beenden

    ' CurrentProcess.Kill()

    ReturnCode = 0
    Return ReturnCode

    Exit Function

    End If

    End If

    ' Nach angegebenen Namen suchen

    If ProcessName <> "" Then

    If CurrentProcessNames(ProcessCount) + ".exe" = LCase(ProcessName) Then

    ' Prozess beenden

    CurrentProcess.Kill()

    ReturnCode = 0
    Return ReturnCode

    Exit Function

    End If

    End If

    Next CurrentProcess

    ReturnCode = 15360
    Return ReturnCode

    Exit Function

    Catch

    ReturnCode = 10240
    Return ReturnCode

    Exit Function

    End Try

    End Function

    End Class
    </code>
    Ich hab auch nicht allzuviel Ahnung von VB .NET,
    aber falls sich das Problem noch nicht gelöst haben sollte:
    Beim kompilieren gibt es evtl. noch die Möglichkeit
    zwischen Native Und P-Code zu wechseln. Probier doch
    mal, den P-Code (= interpretierte Codeausführung)
    zu benutzen. Ich konnte so einige Dinge auch wieder
    zum Laufen bringen, die nur in der IDE aber nicht als
    eigenständige Applikation funktionierten.
    Malcolm schrieb am 23.07.2004 10:08
    Hi, Sidious.

    Ich muss zugeben, dass ich kein einziges Fitzelchen Vb.Net beherrsche, ...



    VB .NET unterscheidet sich nur in wenigen Punkten
    von VB 6.0. Das kann man nicht zu oft sagen, denn .NET hört sich so anders an, aber in Wirklichkeit ist VB .NET einfach die VB-Version 7.0.
    (Es gibt sogar schon die VB-Version 7.1)

    Der große Unterschied besteht in Tausenden von neuen Klassen und Prozeduren, die schon fertiggestellt sind. Es gibt wirklich etliche Funktionen in .NET. Diese Funktionen werden von der Common Language Runtime beherbergt.

    Guckt ma hier:

    Definition der .NET - Grundkonzepte
    msdn.microsoft.com/library/deu…commonlanguageruntime.asp

    So, wenn Ihr das durchlest, seid Ihr bestens informiert.