2016-12-06 5 views
-1

Я пытаюсь написать простую программу, которая будет проверять каждые 5 секунд, если какой-то процесс запущен, а если это так, а затем убить его. Программа должна работать в фоновом режиме и запускаться при каждом запуске машины. Его написанные на VB процесс до сих пор:Сканировать процесс, а затем убить его, как только его нашли, и начать с нуля

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 

Но проблема в том, что показывает окно консоли каждый раз, когда он начинает, и он также выходит из строя после того, как он убивает обнаруженный процесс

ответ

-1

Конечно, потому что вы пытаетесь поиск процесс, который вы уже убили: For Each proc As Process In Process.GetProcessesByName("hl")

попробовать что-то вроде этого:

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

Спасибо йо u для ответа. Я изменил, как вы предложили, но он по-прежнему падает после того, как он убил процесс и если процесс должен быть перезапущен пользователем. – degaro

+0

Итак, прежде всего используйте 'Try Catch', тогда вы можете лучше обрабатывать ошибки. И я предлагаю вам запустить этот код в отдельном потоке. После того, как вы изменили свой код с помощью команды «Попытка», дайте мне знать сообщение об ошибке. – Tyler