Start · Sprachen · PHP · Referenz · win32_start_service

win32_start_service

Funktion

Startet einen Windows-Dienst auf dem lokalen oder einem entfernten Rechner.

seit PHP 5.1.0 Kategorie: misc

Signatur

win32_start_service(string $servicename, string $machine = null): int

Beschreibung

win32_start_service() sendet einen Startbefehl an den Windows Service Control Manager (SCM) für den angegebenen Dienst. Die Funktion ist Teil der win32service-PECL-Erweiterung und steht ausschließlich auf Windows-Systemen zur Verfügung.

Der Dienst muss zuvor installiert sein (z. B. mit win32_create_service()). Der Rückgabewert ist ein Windows-Fehlercode: WIN32_NO_ERROR (0) signalisiert Erfolg, jeder andere Wert steht für einen spezifischen Systemfehler. Mit win32_strerror() lässt sich der Fehlercode in eine lesbare Meldung umwandeln.

Ab Version 0.2.0 der win32service-Erweiterung wirft die Funktion bei einem Fehler eine Win32ServiceException statt lediglich einen Fehlercode zurückzugeben – der Code muss entsprechend angepasst werden.

Für den Start eines Dienstes auf einem entfernten Rechner sind ausreichende Berechtigungen erforderlich. In der Regel muss das ausführende PHP-Skript unter einem Konto mit Administratorrechten laufen.

Parameter

Name Typ Default Beschreibung
$servicename Pflicht string Der interne Name des Windows-Dienstes (nicht der Anzeigename), wie er im Dienste-Manager oder in der Registry unter HKLM\SYSTEM\CurrentControlSet\Services eingetragen ist.
$machine string null Der Name des entfernten Rechners, auf dem der Dienst gestartet werden soll (z. B. \\\\remotehost). Wird null oder ein leerer String übergeben, wird der lokale Rechner verwendet.

Rückgabewert

Typ
int
Beschreibung
Gibt WIN32_NO_ERROR (0) bei Erfolg zurück. Bei einem Fehler wird ein Windows-Fehlercode als Integer zurückgegeben. Ab win32service 0.2.0 wird stattdessen eine Win32ServiceException geworfen.

Beispiele

Einen lokalen Windows-Dienst starten

<?php
if (!extension_loaded('win32service')) {
    die('Die win32service-Erweiterung ist nicht geladen.');
}

$serviceName = 'MyCustomService';

try {
    $result = win32_start_service($serviceName);

    if ($result === WIN32_NO_ERROR) {
        echo "Dienst '{$serviceName}' wurde erfolgreich gestartet.\n";
    } else {
        echo "Fehler beim Starten des Dienstes: " . win32_strerror($result) . " (Code: {$result})\n";
    }
} catch (Win32ServiceException $e) {
    echo "Exception beim Starten des Dienstes: " . $e->getMessage() . "\n";
}
Dienst 'MyCustomService' wurde erfolgreich gestartet.

Dienst auf einem entfernten Rechner starten

<?php
if (!extension_loaded('win32service')) {
    die('Die win32service-Erweiterung ist nicht geladen.');
}

$serviceName = 'Spooler';
$remoteMachine = '\\\\PRINTSERVER01';

try {
    $result = win32_start_service($serviceName, $remoteMachine);

    if ($result === WIN32_NO_ERROR) {
        echo "Druckspooler auf {$remoteMachine} wurde gestartet.\n";
    } else {
        echo "Fehler (" . $result . "): " . win32_strerror($result) . "\n";
    }
} catch (Win32ServiceException $e) {
    echo "Fehler: " . $e->getMessage() . "\n";
}
Druckspooler auf \\PRINTSERVER01 wurde gestartet.

// Wichtig · Fallstricke

Plattformbeschränkung: Diese Funktion ist ausschließlich unter Windows verfügbar und erfordert die PECL-Erweiterung win32service. Auf Linux/macOS-Systemen ist sie nicht verfügbar.

Berechtigungen: Das PHP-Skript muss mit ausreichenden Windows-Berechtigungen ausgeführt werden (in der Regel Administratorrechte), um Dienste starten zu können. Andernfalls gibt die Funktion den Fehlercode ERROR_ACCESS_DENIED zurück bzw. wirft eine entsprechende Exception.

API-Änderung ab Version 0.2.0: Ab win32service 0.2.0 wird bei Fehlern eine Win32ServiceException geworfen. Älterer Code, der nur den Rückgabewert prüft, muss mit einem try/catch-Block nachgerüstet werden.

Asynchrones Starten: Der Befehl startet den Dienst asynchron – die Funktion kehrt zurück, bevor der Dienst vollständig hochgefahren ist. Um den tatsächlichen Zustand zu prüfen, sollte win32_query_service_status() verwendet werden.