Start · Sprachen · PHP · Referenz · win32_continue_service

win32_continue_service

Funktion

Setzt einen zuvor pausierten Windows-Dienst wieder fort und versetzt ihn in den Zustand <code>WIN32_SERVICE_RUNNING</code>.

Kategorie: misc

Signatur

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

Beschreibung

win32_continue_service() gehört zur PECL-Erweiterung win32service und sendet dem Windows Service Control Manager (SCM) den Befehl, einen pausierten Dienst fortzusetzen. Der Dienst muss sich zuvor im Zustand WIN32_SERVICE_PAUSED befinden – also durch win32_pause_service() oder den SCM angehalten worden sein.

Die Funktion ist ausschließlich unter Windows verfügbar und erfordert ausreichende Berechtigungen (in der Regel Administratorrechte), um den SCM anzusprechen. Bei Erfolg gibt sie WIN32_NO_ERROR (0) zurück; im Fehlerfall einen Windows-Fehlercode.

Soll ein Dienst auf einem entfernten Rechner fortgesetzt werden, kann der optionale Parameter $machine mit dem Hostnamen oder der IP-Adresse des Zielrechners angegeben werden. Ohne diesen Parameter wirkt der Aufruf auf dem lokalen System.

Typischer Einsatz: Wartungsabläufe, bei denen ein Dienst kurzzeitig pausiert und anschließend programmatisch fortgesetzt wird, ohne ihn vollständig neu starten zu müssen.

Parameter

Name Typ Default Beschreibung
$servicename Pflicht string Der interne Dienstname (nicht der Anzeigename), wie er im SCM registriert ist, z. B. "W32Time".
$machine string null Optionaler Hostname oder IP-Adresse des Zielrechners. Wird der Parameter weggelassen oder ist null, wird der lokale Rechner verwendet.

Rückgabewert

Typ
int
Beschreibung
Gibt WIN32_NO_ERROR (0) bei Erfolg zurück. Im Fehlerfall wird ein Windows-Fehlercode als Integer zurückgegeben, z. B. wenn der Dienst nicht pausiert ist oder die Berechtigung fehlt.

Beispiele

Einen pausierten lokalen Dienst fortsetzen

<?php
// Dienst zunächst pausieren
$result = win32_pause_service('W32Time');
if ($result !== WIN32_NO_ERROR) {
    echo 'Fehler beim Pausieren: ' . $result . PHP_EOL;
    exit(1);
}

echo 'Dienst wurde pausiert. Warte 5 Sekunden...' . PHP_EOL;
sleep(5);

// Dienst fortsetzen
$result = win32_continue_service('W32Time');
if ($result === WIN32_NO_ERROR) {
    echo 'Dienst wurde erfolgreich fortgesetzt.' . PHP_EOL;
} else {
    echo 'Fehler beim Fortsetzen des Dienstes. Fehlercode: ' . $result . PHP_EOL;
}
Dienst wurde pausiert. Warte 5 Sekunden... Dienst wurde erfolgreich fortgesetzt.

Dienst auf einem entfernten Rechner fortsetzen

<?php
$serviceName = 'Spooler';
$remoteHost  = 'FILESERVER01';

$result = win32_continue_service($serviceName, $remoteHost);

if ($result === WIN32_NO_ERROR) {
    echo "Druckspooler auf {$remoteHost} wurde fortgesetzt." . PHP_EOL;
} else {
    echo "Konnte Dienst nicht fortsetzen. Win32-Fehlercode: {$result}" . PHP_EOL;
}
Druckspooler auf FILESERVER01 wurde fortgesetzt.

// Wichtig · Fallstricke

Plattformbeschränkung: Diese Funktion steht ausschließlich unter Windows zur Verfügung. Sie erfordert die PECL-Erweiterung win32service, die separat installiert werden muss.

Berechtigungen: Der PHP-Prozess bzw. der ausführende Benutzer benötigt das Windows-Recht Service Control Manager abzufragen und zu steuern – in der Regel Administratorrechte. Fehlen die Rechte, wird ein entsprechender Fehlercode zurückgegeben.

Dienststatus prüfen: Vor dem Aufruf empfiehlt es sich, mit win32_query_service_status() sicherzustellen, dass der Dienst tatsächlich im Zustand WIN32_SERVICE_PAUSED ist. Ein Aufruf auf einem bereits laufenden oder gestoppten Dienst schlägt fehl.

API-Änderung ab win32service 1.0.0: Ab dieser Version wirft die Funktion bei einem Fehler eine Win32ServiceException statt einen Fehlercode zurückzugeben – Aufrufe sollten daher in einem try/catch-Block erfolgen, sobald diese Version eingesetzt wird.