2016-12-06 2 views
-1
gestartet

Ich versuche, ein einfaches Programm zu schreiben, das alle 5 Sekunden überprüfen würde, ob ein bestimmter Prozess läuft und wenn es ist, dann töte es. Das Programm sollte im Hintergrund laufen und bei jedem Start der Maschine gestartet werden. Seine in VB geschrieben Prozess so weit:Nach Prozess suchen und dann töten, sobald gefunden und über

Module Module1 
Private Declare Auto Function ShowWindow Lib "user32.dll" (ByVal hWnd As IntPtr, ByVal nCmdShow As Integer) As Boolean 
Private Declare Auto Function GetConsoleWindow Lib "kernel32.dll"() As IntPtr 
Private Const SW_HIDE As Integer = 0 

Sub Main() 
eh: 
    Dim hWndConsole As IntPtr 
    hWndConsole = GetConsoleWindow() 
    ShowWindow(hWndConsole, SW_HIDE) 
    For Each proc As Process In Process.GetProcessesByName("hl") 'hl is the process to look for 
     proc.WaitForExit(5000) 'wait up to 5 seconds. 
     proc.Kill() 'force the process to exit. 

    Next proc 
    GoTo eh 
    Threading.Thread.Sleep(5000) 'Sleep for 5 sec and start over 
End Sub 
End Module 

Aber das Problem ist, zeigt es Konsolenfenster jedes Mal beginnt es und stürzt auch nach den erfassten Prozess tötet

Antwort

-1

Natürlich, da Sie versuchen, Suche nach einem Prozess, den Sie bereits getötet haben: For Each proc As Process In Process.GetProcessesByName("hl")

versuchen, etwas wie folgt aus:

For Each prog As Process In Process.GetProcesses 
    If prog.ProcessName = "hl" Then 
      prog.Kill() 
      Exit For 
    End If 
Next 
+0

Thank yo für Antwort. Ich änderte, wie Sie vorgeschlagen haben, aber es stürzt immer noch ab, nachdem es den Prozess beendet hat und wenn der Prozess vom Benutzer neu gestartet werden sollte. – degaro

+0

Also .. zuerst einmal 'Try Catch' verwenden, dann können Sie Fehler besser behandeln. Und ich schlage vor, dass Sie diesen Code in einem separaten Thread ausführen. Nachdem Sie Ihren Code mit dem Try bearbeiten, lassen Sie mich die Fehlermeldung wissen. – Tyler

Verwandte Themen