Signatur
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
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 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;
}
// 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.