Как перезапустить исполняемый файл в VB.net - PullRequest
0 голосов
/ 09 февраля 2010

Я новичок в VB.net, сейчас я разрабатываю службу Windows, которая при запуске запускает * .exe. Как я могу обнаружить и перезапустить процесс этого исполняемого файла, если он был убит какой-то другой программой?

Мой код, как показано ниже:

Public Class MyWinService
Dim RetVal
Protected Overrides Sub OnStart(ByVal args() As String)
    EventLog.WriteEntry("MyService Started")

    RetVal = Shell("JobService.exe", 1)

End Sub

Protected Overrides Sub OnStop()
    EventLog.WriteEntry("MyService Stopped")
    Dim myProcess = Process.GetProcessById(RetVal)
    myProcess.Kill()
End Sub

Protected Overrides Sub OnPause()
    EventLog.WriteEntry("MyService Paused")
End Sub

Protected Overrides Sub OnContinue()
    EventLog.WriteEntry("MyService Resumed")
End Sub

Protected Overrides Sub OnCustomCommand(ByVal command As Integer)
    If command = 200 Then
        EventLog.WriteEntry("Custom Command 200 invoked")
    ElseIf command = 210 Then
        EventLog.WriteEntry("Custom Command 210 invoked")
    End If
End Sub

Private Sub Process1_Exited(ByVal sender As System.Object, ByVal e As System.EventArgs)

End Sub

Конечный класс

Заранее большое спасибо!

Ответы [ 2 ]

3 голосов
/ 09 февраля 2010

Неправильный способ сделать это - создать объект Process в методе OnStart ().Привяжите метод к событию Exited объекта процесса, который перезапускает объект.http://msdn.microsoft.com/en-us/library/system.diagnostics.process.onexited(VS.71).aspx имеет некоторую информацию о событии Exited.

Правильный способ сделать это - создать объект Timer.Каждое количество минут X создайте объект Process, проверьте идентификатор дескриптора и посмотрите, работает ли он.Если нет, то создайте новый исполняемый файл, аналогичный тому, что вы делали в методе OnStart ().

http://csharpstruggles.blogspot.com/2005/02/using-timer-in-windows-service.html

http://social.msdn.microsoft.com/Forums/en-US/vbgeneral/thread/bc175c60-f81b-4d1a-975d-717368468238

Элегантный способ, как упоминалось выше, выполнять работу в самой службе.

2 голосов
/ 09 февраля 2010

Вы можете использовать process.start и process.Exited методы, например:

Imports System.Diagnostics

Public Class Form1
Dim WithEvents proc As Process

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)_
  Handles Button1.Click
' start the process
proc = Process.Start(progName)
proc.EnableRaisingEvents = True
End Sub

Private Sub proc_Exited(ByVal sender As Object, ByVal e As System.EventArgs) _
  Handles proc.Exited
' restart the process whenever it exits
proc = Process.Start(progName)
proc.EnableRaisingEvents = True
End Sub

End Class
...