hacol22
Goto Top

Mit Konsolenanwendung Dienst auf Status prüfen

Hallo,

wir haben auf unserem Server einen MCAffee Client installiert (Dienstname: McShield). Lieder schmiert uns dieser Dienst aus unerklärlichen Gründen ständig ab, also wird in den Status beendet zurückgesetzt. McAffe-Support meint der Server müsse neu gestartet werden. Leider passiert das alle paar Tage und wir können nicht ständig den Server rebooten.

Nun habe ich die Aufgabe bekommen eine Konsolenanwendung zu erstellen welcher alle paar Minuten den Dienst prüft ob dieser gestartet ist oder nicht. Sollte der Dienst beendet sein, soll die Anwendung diesen automatisch starten.

Versuche schon seit zwei Tagen in Visual Studio eine solche Konsolenanwendung zu erstellen, leider finde ich keinen Ansatz. Kann mir jemand beim Code etwas behilflich sein? Vielen Dank.


MfG
hacol22

Content-ID: 67483

Url: https://administrator.de/contentid/67483

Ausgedruckt am: 22.11.2024 um 16:11 Uhr

36831
36831 30.08.2007 um 12:57:16 Uhr
Goto Top
Moin,

reicht es nicht, wenn man in den Diensteigenschaften in der Rubrik Wiederherstellen als Aktion Dienst neustarten einstellt?

ansonsten reicht doch eigentlich ein
net start McShield
Wenn der Dienst bereits läuft, wird halt ausgegeben, dass der Dienst bereits gestartet ist. Wenn der Dienst, wenn er beendet wird / abstürzt, als Dienststatus auch nicht mehr "gestartet" hat, sollte das doch völlig ausreichen, oder?

MfG,
VW
hacol22
hacol22 30.08.2007 um 13:04:19 Uhr
Goto Top
Ich möchte in Visual Studio ein Projekt erstellen (Konsolenanwendung). Wenn ich dann in das Codefenster "net start McShield" eingebe und debuggen möchte, kommt die Fehlermeldung "Fehler beim erstellen". Irgendwie muss das anders laufen, ich weiß aber nicht wie.
Darüber hinaus möchte ich direkt in Visual Studio eine Automatisierung einbauen, damit dieser Code alle paar Minuten ausgefürht wird. Geht das überhaupt?
SlainteMhath
SlainteMhath 30.08.2007 um 13:25:12 Uhr
Goto Top
"net start McShield" gehört auch nicht ins VS, sondern in die Eingabeaufforderung face-smile

In welcher Programmiersprache / VS-Version willst/sollst Du das programmieren?
hacol22
hacol22 30.08.2007 um 13:37:08 Uhr
Goto Top
Visual Basic .net 2003. Da gibt es unter Projekte die Option Neue Konsolenanwendung. Diese habe ich gewählt. Geht so etwas nicht mit VB.net?
SlainteMhath
SlainteMhath 30.08.2007 um 13:46:16 Uhr
Goto Top
Also in .NET 2.0 gibts die Klasse System.ServiceProcess.ServiceController - ich weis allerdings nicht, ob die in .NET 1.x auch schon vorhanden ist.
Iwan
Iwan 30.08.2007 um 13:54:23 Uhr
Goto Top
sProcessName = "meineapplikation.exe"        ' Hier die Ausführbare Datei der zu überwachenden Applikation angeben  

sComputer = "."     
Set oWmi = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & sComputer & "\root\cimv2")  
Set oShell = CreateObject("WScript.Shell")  

Do
  Set colProcessList = oWmi.ExecQuery("Select * from Win32_Process Where Name = '" & sProcessName & "'")  
  If colProcessList.Count = 0 Then
     oShell.Run "C:\pfad\meineapplikation.exe", 1, False   ' Hier den Pfad zur überwachenden Applikation angeben  
   End If

  WScript.Sleep 5 * 60 * 1000        ' Hier kann die Wartezeit bis zur nächsten Prüfung eingestellt werden. Standard: 5 min  
Loop
hacol22
hacol22 30.08.2007 um 14:32:50 Uhr
Goto Top
Bekomme beim ausführen des Scriptes folgende Fehlermeldung:
"Das System kann die angegebene Datei nicht finden." in Zeile (siehe -->). Diese Datei ist aber auf jeden Fall in diesem Pfad vorhanden. Allerdings startet der Dienst nicht auch wenn ich diese Datei manuell ausführe.

_____________________________________
Option Explicit

Dim sProcessName, sComputer, oShell, oWmi, colProcessList


sProcessName = "McShield.exe"        ' Hier die Ausführbare Datei der zu überwachenden Applikation angeben  

sComputer = "."     
Set oWmi = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & sComputer & "\root\cimv2")  
Set oShell = CreateObject("WScript.Shell")  

Do
  Set colProcessList = oWmi.ExecQuery("Select * from Win32_Process Where Name = '" & sProcessName & "'")  
  If colProcessList.Count = 0 Then
-->     oShell.Run "C:\Programme\Network Associates\VirusScan\Mcshield.exe", 1, False   ' Hier den Pfad zur überwachenden Applikation angeben  
   End If

  WScript.Sleep 5 * 60 * 1000        ' Hier kann die Wartezeit bis zur nächsten Prüfung eingestellt werden. Standard: 5 min  
Loop
SlainteMhath
SlainteMhath 30.08.2007 um 14:37:45 Uhr
Goto Top
Ersetze die Zeile durch

oShell.Run "%windir%\system32\net start McShield",1,false

Ich hoffe Dich fragt in der Firma keiner, wie das Script funktioniert face-smile
hacol22
hacol22 30.08.2007 um 14:46:50 Uhr
Goto Top
Ich kann ja dein Script soweit gut nachvollziehen. Ansonsten hätte die Antwort "startet halt" gelautet. Ich bekomme hier auch nie vernünftige Antworten face-smile

Dein Script funktioniert auf jeden Fall. Besten Dank!!
TuXHunt3R
TuXHunt3R 30.08.2007 um 15:54:25 Uhr
Goto Top
netsvc.exe auf dem Windows 2000 Resource Kit
Biber
Biber 19.09.2007 um 22:18:16 Uhr
Goto Top
Moin hacol22,

ich habe mal Deinen Beitrag auf "gelöst" gesetzt (eigentlich Dein Job).

Schade finde ich die etwas sehr knappe Antwort von TuXHunt3R.

Ich fände die (Remote-) Prüfung mit NetSvc schon universeller und allgemeiner verwendbar.

Siehe dazu z.B. M$-KB Q166819.

@TuXHunt3R:
Eine Beispielzeile mehr, so etwas wie..
NetSvc /query \\hacol22sServer "McShield.exe"  
...hätte es vielleicht deutlicher gemacht.

Grüße
Biber
TuXHunt3R
TuXHunt3R 19.09.2007 um 22:33:41 Uhr
Goto Top
@Biber

Sorry, werde das nächste Mal dran denken
Biber
Biber 19.09.2007 um 23:58:32 Uhr
Goto Top
@TuXHunt3R

...werde das nächste Mal dran denken...
Danke... wäre wirklich zu schade, wenn gute Lösungen kommentarlos untergingen...

Grüße
Biber