Start · Sprachen · PHP · Referenz · Win32ServiceException

Win32ServiceException

Klasse

Ausnahme-Klasse der Win32Service-Erweiterung, die Windows-Dienst-Fehler als strukturierte Exceptions wirft und den Vergleich mit Fehlerkonstanten überflüssig macht.

seit PHP 1.0.0 Kategorie: error

Signatur

class Win32ServiceException extends RuntimeException

Beschreibung

Win32ServiceException ist die zentrale Fehlerbehandlungsklasse der Win32Service-PECL-Erweiterung. Anstatt wie früher einen Integer-Rückgabewert mit Windows-Fehlerkonstanten (z. B. WIN32_ERROR_FILE_NOT_FOUND) manuell zu vergleichen, werden Fehler nun direkt als Exception geworfen, die abgefangen und ausgewertet werden können.

Die Klasse erbt von RuntimeException und bringt damit die üblichen Methoden getMessage(), getCode() und getPrevious() mit. Der Code der Exception entspricht dem numerischen Windows-Fehlercode (z. B. 1060 für einen nicht vorhandenen Dienst), und die Nachricht enthält eine menschenlesbare Beschreibung des Fehlers.

Typische Situationen, in denen Win32ServiceException geworfen wird, sind: Starten oder Stoppen eines nicht vorhandenen Dienstes, fehlende Berechtigungen beim Zugriff auf den Service Control Manager (SCM) sowie fehlerhafte Konfigurationsparameter bei der Registrierung eines neuen Dienstes.

Durch den Einsatz von try/catch-Blöcken lässt sich die Fehlerbehandlung deutlich übersichtlicher und robuster gestalten als mit dem alten Rückgabewert-basierten Ansatz.

Beispiele

Dienst starten mit strukturierter Fehlerbehandlung

<?php
// Einen Windows-Dienst starten und Win32ServiceException abfangen
try {
    win32_start_service('MeinDienst');
    echo "Dienst erfolgreich gestartet.";
} catch (Win32ServiceException $e) {
    echo "Fehler beim Starten des Dienstes:" . PHP_EOL;
    echo "Code:    " . $e->getCode() . PHP_EOL;
    echo "Meldung: " . $e->getMessage() . PHP_EOL;
}
Fehler beim Starten des Dienstes: Code: 1060 Meldung: The specified service does not exist as an installed service.

Dienst registrieren und spezifischen Fehler unterscheiden

<?php
// Einen neuen Windows-Dienst registrieren
$config = [
    'service'     => 'MeinPHPDienst',
    'display'     => 'Mein PHP Hintergrunddienst',
    'description' => 'Demonstrationsdienst fuer Win32Service',
    'path'        => 'C:\\php\\php.exe',
    'params'      => 'C:\\dienste\\worker.php',
];

try {
    win32_create_service($config);
    echo "Dienst erfolgreich registriert.";
} catch (Win32ServiceException $e) {
    // Fehlercode 1073 = Dienst existiert bereits
    if ($e->getCode() === 1073) {
        echo "Dienst ist bereits registriert, kein erneutes Anlegen noetig.";
    } else {
        throw $e; // Unbekannten Fehler weiterwerfen
    }
}
Dienst ist bereits registriert, kein erneutes Anlegen noetig.

// Wichtig · Fallstricke

Berechtigungen: Die meisten Win32Service-Operationen erfordern erhöhte Berechtigungen (Administrator-Rechte). Fehlt die Berechtigung, wird eine Win32ServiceException mit dem Fehlercode 5 (Access is denied) geworfen. Stelle sicher, dass der PHP-Prozess mit ausreichenden Rechten läuft.

Plattform: Win32ServiceException ist ausschließlich unter Windows verfügbar und erfordert die installierte win32service-PECL-Erweiterung. Auf anderen Betriebssystemen existiert die Klasse nicht.

Migration: Vor Version 1.0.0 der Erweiterung gaben Funktionen wie win32_start_service() einen Integer-Fehlercode zurück, der mit Konstanten verglichen werden musste. Dieser Mechanismus ist seit 1.0.0 zugunsten von Exceptions als veraltet markiert und sollte nicht mehr verwendet werden.