Windows-System-Dienst abfragen... gestartet/gestoppt

Hallo,

Kennt jemand eine Möglichkeit zur Abfrage, ob ein System-Dienst läuft bzw. nicht läuft?

„sc.exe query <SERVICENAME>“

Bin nur nicht sicher, ob das Tools beim Windows Server 2003 dabei ist oder ob es ein ResourceKit Tool ist.

Hope this helps.

lg, Gregor.

Hi Gregor,

Aber wie bekomme ich den zurückgelieferten State z.B. RUNNING, als Bolean in IPS zurückgeliefert?
Hast du eine Ahnung?

Bei Vista ist’s dabei.


echo IPS_Execute("sc.exe", "query <name>", false, true);

paresy

Hallo paresy,

Bei Vista ist’s dabei.

Wie funktioniert das bei Vista?

Ich halte mir das neue „Wunder“-Windows noch etwas vor…

Damit war gemeint, dass die „sc.exe“ bei Vista dabei ist.

IPS_Execute kannst du auch so benutzen.

IPS läuft natürlich auch auf Vista, sieht aber nicht viel bunter aus :slight_smile:

Hier nochmal ein etwas schöneres Beispiel:


$data = IPS_Execute("sc.exe", "query wudfsvc", false, true);
$lines = explode("
", $data);
foreach($lines as $line)
{
   if(trim($line) != "")
   {
      if(strpos($line, ":") === false)
      {
         $servinfo["STATE"].=" ".trim($line);
      }
      else
      {
         $linedata=explode(":", $line);
         $servinfo[trim($linedata[0])]=trim($linedata[1]);
      }
   }
}
print_r($servinfo);

Ergibt:


Array
(
    [SERVICE_NAME] => wudfsvc
    [TYPE] => 20  WIN32_SHARE_PROCESS
    [STATE] => 4  RUNNING (NOT_STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN)
    [WIN32_EXIT_CODE] => 0  (0x0)
    [SERVICE_EXIT_CODE] => 0  (0x0)
    [CHECKPOINT] => 0x0
    [WAIT_HINT] => 0x0
)

Dann kann man per $servinfo[„STATE“] gucken ob der Status auf RUNNING ist.

paresy

paresy

Das erschlägt mich gleich wieder:D

Danke!
Ich werde morgen etwas damit „rumexperimentieren“…

Hallo!

Irgendwie schaffe ich das nicht bzw. komme nicht ganz klar mit der „Dienst-Abfrage“

Mein Script:

<?
/*
*******************************
 VisionGS starten und
*******************************
File     : VISIONGS_START-STOP.ips.php
Trigger  : Timerwizard
Interval : 10 Minuten
*/

// Abfrage, ob VisionGS-Dienst läuft
$vgs_dienst = IPS_Execute("sc.exe", "query visiongs", False, True);

// Abfrage, ob Helligkeit ausreichend
$helligkeit = GetValueInteger("HELLIGKEIT");



if ($helligkeit >= 70){
if ($vgs_dienst = True)
               // Anwendung beenden, falls noch aktiv
                   //system(' "taskkill /f /im visiongs.exe /t" ');
              // Anwendung starten
                   //system(' "C:/Programme/visiongs be/visiongsa.exe" ');
// Dienst starten
    IPS_Execute("net start", "visiongs", False, True);
// Status-Variable setzen
    SetValueBoolean("VISIONGS_RUN", True);
}


if ($helligkeit < 70){
if ($vgs_dienst = True)
// Dienst beenden
    IPS_Execute("net stop", "visiongs", False, True);
           // Anwendung beenden
           // system(' "taskkill /f /im visiongs.exe /t" ');
// Status-Variable setzen
    SetValueBoolean("VISIONGS_RUN", False);
}
?>

Die Abfrage ist so, wie ich sie hier mache mit Sicherheit falsch.
$vgs_dienst wird garnicht beachtet und selbst wenn der Dienst schon läuft, wird versucht, nochmals den Dienst zu starten.

Setze ich aber

if ($vgs_dienst = False)

…dann wird das Script nicht weiter abgearbeitet.
Also muss es ja trotzdem zum Ablauf beitragen.

Mit „if-else“ habe ich auch schon probiert, aber komplett ohne Erfolg.

Was mache ich falsch?
Wer kann helfen?
Wie muss ich das Script umarbeiten, dass Helligkeit und Dienststatus in der Abfrage sind?