Controleren of Proces nog draait

Status
Niet open voor verdere reacties.

murdoch201

Gebruiker
Lid geworden
31 mei 2008
Berichten
336
Hoi,

Ik ben bezig met een centrale applicatie waarbij een gebruiker server-software kan kopen, en die vanuit deze applicatie ook kan opstarten etc.

Ik heb 1 probleem: Ik wil kunnen controleren of het proces nog draait. De gebruiker kan ook meerdere keren 1 dezelfde server-software opstarten. Simpelweg het proces 'server.exe' opzoeken gaat dus bvb niet, want als er 1tje uitvalt maar de anderen nog draaien kan ik dit niet zien. Ik zou ook graag willen weten welke er specifiek uitvalt, zodat deze herstart kan worden vanuit de centrale applicatie.

Ik heb vaag al iets gevonden over Mutex namen maar ik kan er niet aan uit :confused:

Iemand die kan helpen?

grts,
Murdoch201
 
Hoi,

Je kan bij het opstarten kijken naar het ID van het proces en op basis daarvan een nieuw proces starten.

Daarover kan je meer op internet vinden.

MartinJM
 
Hoi,

Heb even gekeken, en heb nu dit:

Code:
Try
                Dim p As Process
                p = Process.GetProcessById(pID)
            Catch ex As Exception
                MsgBox(pID & " proces draait niet")
            End Try

Maar nu geeft hij de msgbox iedere keer weer, ook als het proces wel degelijk draait. En vervolgens crasht ie dan met deze melding:

Code:
An unhandled exception of type 'System.ArgumentOutOfRangeException' occurred in System.Windows.Forms.dll

Additional information: InvalidArgument=Waarde van 1 is niet geldig voor index.

Ik heb ook al even gezocht op Google, maar daar vind ik niks over GetprocessbyID, iedereen dringt het gebruik vanGetprocessbyName op, wat in dit geval niet mogelijk is
 
Hoi,

Ik bedacht me net dat je natuurlijk ook gewoon het proces zelf op kan slaan, zodat je het later kan killen. Dat zou wel wat meer geheugen kunnen kosten.

Ook moet je er nog even over nadenken wat je gaat doen als het beheerprogramma afgesloten (en opnieuw gestart) wordt. Hoe wil je er dan voor gaan zorgen dat de gebruiker het programma wel nog als beheerprogramma kan gebruiken?


Ik vind het wel raar dat je code nu niet werkt... Bij mij werkt dat stukje gewoon (met als gestart proces cmd). Weet je zeker dat het processId goed in pID terecht komt? Heb je dat ook met breakpoints gechecked?
Dit is hoe ik het (even snel met maar 1 proces) heb geprobeerd:
[CPP]Public Class Form1

Dim pID As Integer

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim p As New Process
p.StartInfo.FileName = "cmd"
p.Start()

pID = p.Id
End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Try
Dim p As Process
p = Process.GetProcessById(pID)

p.Kill()
Catch ex As Exception
MsgBox(pID & " proces draait niet")
End Try
End Sub
End Class
[/CPP]
En dat werkt bij mij.

MartinJM
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan