Start · Sprachen · PHP · Referenz · win32_query_service_status

win32_query_service_status

Funktion

Fragt den aktuellen Status eines Windows-Dienstes (Service) auf dem lokalen oder einem entfernten Rechner ab.

seit PHP 5.1.0 Kategorie: misc

Signatur

win32_query_service_status(string $servicename, string $machine = null): array|int

Beschreibung

win32_query_service_status() ist Bestandteil der win32service-Erweiterung und ermöglicht es, den Betriebsstatus eines Windows-Systemdienstes abzufragen. Die Funktion kommuniziert direkt mit dem Windows Service Control Manager (SCM) und gibt ein Array zurück, das detaillierte Statusinformationen enthält – darunter den aktuellen Dienststatus, den Prozesstyp sowie Hinweise auf laufende Steuervorgänge.

Typische Anwendungsfälle sind die Überwachung kritischer Systemdienste, das Prüfen ob ein Dienst vor einem Start- oder Stopp-Vorgang bereits läuft, sowie die Implementierung von Verwaltungs-Skripten auf Windows-Servern. Der optionale Parameter $machine ermöglicht auch das Abfragen von Diensten auf Remote-Maschinen.

Das zurückgegebene Array enthält Schlüssel wie CurrentState (z. B. WIN32_SERVICE_RUNNING, WIN32_SERVICE_STOPPED), ServiceType, ControlsAccepted, Win32ExitCode, ServiceSpecificExitCode, CheckPoint und WaitHint. Bei einem Fehler wird ein Integer-Fehlercode zurückgegeben.

Hinweis: Diese Funktion ist ausschließlich unter Windows verfügbar und setzt die Installation der win32service-Erweiterung voraus. Ab Version 1.0.0 der Erweiterung löst die Funktion bei Fehlern eine Win32ServiceException aus, statt einen Fehlercode zurückzugeben.

Parameter

Name Typ Default Beschreibung
$servicename Pflicht string Der interne Name des Windows-Dienstes (nicht der Anzeigename), z. B. W32Time für den Windows-Zeitdienst.
$machine string null Der Name des Remote-Rechners, auf dem der Dienst abgefragt werden soll. Wird der Parameter weggelassen oder ist null, wird der lokale Rechner verwendet.

Rückgabewert

Typ
array|int
Beschreibung
Gibt bei Erfolg ein assoziatives Array mit Statusinformationen des Dienstes zurück. Die wichtigsten Schlüssel sind CurrentState (aktueller Zustand, entspricht einer WIN32_SERVICE_*-Konstante), ServiceType, ControlsAccepted, Win32ExitCode, ServiceSpecificExitCode, CheckPoint und WaitHint. Im Fehlerfall wird ein int-Fehlercode zurückgegeben. Ab Erweiterungsversion 1.0.0 wird stattdessen eine Win32ServiceException ausgelöst.

Beispiele

Status des Windows-Zeitdienstes abfragen

<?php
// Status des Windows-Zeitdienstes (W32Time) abfragen
$status = win32_query_service_status('W32Time');

if (!is_array($status)) {
    echo 'Fehler beim Abfragen des Dienststatus. Fehlercode: ' . $status . PHP_EOL;
} else {
    switch ($status['CurrentState']) {
        case WIN32_SERVICE_RUNNING:
            echo 'Dienst läuft.' . PHP_EOL;
            break;
        case WIN32_SERVICE_STOPPED:
            echo 'Dienst ist gestoppt.' . PHP_EOL;
            break;
        case WIN32_SERVICE_START_PENDING:
            echo 'Dienst wird gestartet...' . PHP_EOL;
            break;
        case WIN32_SERVICE_STOP_PENDING:
            echo 'Dienst wird gestoppt...' . PHP_EOL;
            break;
        default:
            echo 'Unbekannter Status: ' . $status['CurrentState'] . PHP_EOL;
    }
}
?>
Dienst läuft.

Dienststatus mit Ausnahmebehandlung (ab Erweiterungsversion 1.0.0)

<?php
// Ab win32service 1.0.0 werden Fehler als Exception geworfen
try {
    $status = win32_query_service_status('Spooler');
    if ($status['CurrentState'] === WIN32_SERVICE_RUNNING) {
        echo 'Der Druckdienst (Spooler) ist aktiv.' . PHP_EOL;
    } else {
        echo 'Der Druckdienst ist nicht aktiv. Status-Code: ' . $status['CurrentState'] . PHP_EOL;
    }
} catch (Win32ServiceException $e) {
    echo 'Fehler beim Abfragen: ' . $e->getMessage() . PHP_EOL;
    echo 'Fehlercode: ' . $e->getCode() . PHP_EOL;
}
?>
Der Druckdienst (Spooler) ist aktiv.

// Wichtig · Fallstricke

Plattform: Diese Funktion ist ausschließlich unter Windows verfügbar. Auf anderen Betriebssystemen ist sie nicht definiert und führt zu einem fatalen Fehler.

Berechtigungen: Das Abfragen von Diensten auf Remote-Maschinen erfordert entsprechende Windows-Berechtigungen. Unzureichende Rechte führen zu einem Fehler oder einer Exception.

API-Änderung in Version 1.0.0: Ab Version 1.0.0 der win32service-Erweiterung wird bei Fehlern keine Integer-Fehlerkodierung mehr zurückgegeben, sondern eine Win32ServiceException geworfen. Bestehenden Code sollte auf Try-Catch umgestellt werden.

Dienstname vs. Anzeigename: Der Parameter $servicename erwartet den internen Dienstnamen (wie er in der Registrierung steht), nicht den benutzerfreundlichen Anzeigenamen. Den internen Namen findet man z. B. in der Windows-Dienstverwaltung (services.msc) unter den Eigenschaften des Dienstes.