2016-12-06 9 views
-1

私は、特定のプロセスが実行中であれば5秒ごとにチェックする簡単なプログラムを作成しようとしています。プログラムはバックグラウンドで実行する必要があり、マシンを起動するたびに起動されます。 VBで書かれた ITSは、これまで プロセス:プロセスをスキャンして見つけたら、それを一度終了してから再起動

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 prog As Process In Process.GetProcesses 
    If prog.ProcessName = "hl" Then 
      prog.Kill() 
      Exit For 
    End If 
Next 
+0

感謝よ:For Each proc As Process In Process.GetProcessesByName("hl")

はそのような何かを試してみてくださいあなたは応答します。あなたが提案したとおりに変更されましたが、プロセスを強制終了した後、プロセスをユーザーが再起動する必要がある場合でもクラッシュします。 – degaro

+0

まず、 'Try Catch'を使うと、エラーをうまく処理できます。そして、私はあなたが '別のスレッド'でこのコードを実行することをお勧めします。 Tryを使用してコードを編集した後、エラーメッセージを教えてください。 – Tyler

関連する問題