Fehler 193: keine zulässige Win32-Anwendung beim Start eines Windows-Dienstes
Wenn beim Starten eines Windows-Services der Fehler 193 “Keine zulässige Win32-Anwendung” gemeldet wird, liegt es häufig daran, dass der Windows-Service-Manager unseren Dienst nicht finden kann. Dies wird durch einen Bug im Windows-Dienste-Manager verursacht und tritt u. a. dann auf, wenn ein Verzeichnisname ein Leerzeichen enthält (z. B. C:\Users\Fridolin Froehlich
) und in dem darüberliegenden Verzeichnis (C:\Users
) eine Datei vorhanden ist, deren Dateiname aus dem ersten Wort des Verzeichnisses besteht (z. B. “C:\Users\Fridolin”). Klingt kompliziert – daher machen wir ein Beispiel:
Beispiel:
Unser Benutzer heißt “Fridolin Froehlich” und sein Home-Verzeichnis lautet C:\Users\Fridolin Froehlich
Im Verzeichnis Users
liegt aber auch eine Datei namens Fridolin
Der erstellte Windows-Service liegt im Verzeichnis C:\Users\Fridolin Froehlich\Repositories\Mein Windows-Service\bin
Wir registrieren den Windows-Service in der PowerShell mit Administrator-Rechten mit dem Befehl:sc.exe create "Mein Windows-Service" binpath="C:\Users\Fridolin Froehlich\Repositories\Mein Windows-Service\bin\Mein Windows-Service.exe"
Daraufhin wird uns die Erstellung des Windows-Service bestätigt:
[SC] CreateService ERFOLG
WICHTIG: Diese Erfolgsmeldung ist keine Garantie dafür, dass der Service vom Windows Service-Manager auch tatsächlich gefunden und gestartet werden kann.
Versuchen wir nun den Service zu starten:
sc.exe start "Mein Windows-Service"
Prompt erhalten wir eine Fehlermeldung: [SC] StartService NICHT ERFOLGREICH, Fehler 193.
Wie löst man den Fehler 193 beim Starten eines Windows-Diensts?
- Möglichkeit A: Die Problem-Datei finden und umbenennen
In obigem Beispiel ist die DateiC:\Users\Fridolin
das Problem. Wenn wir die Datei noch brauchen, sollten wir sie einfach umbenennen. Hierbei genügt es, wenn wir die Datei mit einer Dateiendung versehen (z. B..txt
). Das geht zum Beispiel mit dem Befehlren C:\Users\Fridolin C:\Users\Fridolin.txt
.
Benötigen wir die Datei nicht mehr, können wir sie auch einfach löschen z. B. mit dem Befehldel C:\Users\Fridolin
- Möglichkeit B: Ein anderes Verzeichnis für das Speichern des Windows-Service wählen
Meist ist das Benutzerverzeichnis (in unserem FallC:\Users\Fridolin Froehlich
das Problem, da es meist aus mehreren Wörtern besteht (Vorname, Nachname). Wir müssen uns also ein Verzeichnis heraussuchen oder erstellen, das nicht innerhalb des Benutzerverzeichnisses liegt. BeispielsweiseC:\Projekte\Mein Windows-Service
Dieses Verzeichnis erstellen wir mit dem Befehlmd "C:\Projekte\Mein Windows-Service"
Anschließend kopieren wir unsere Service-Echse äh Service-Exe in dieses Verzeichnis:copy "C:\Users\Fridolin Froehlich\Repositories\Mein Windows-Service\bin\Mein Windows-Service.exe" "C:\Projekte\Mein Windows-Service\"
Was tun, wenn die Fehlermeldung kommt “Set-Content : Es wurde kein Positionsparameter gefunden, der das Argument “binpath=” akzeptiert.”?
Dieser Fehler tritt auf, wenn man in der PowerShell nur den Befehl sc
verwendet, anstatt sc.exe
Der Befehl sc
in der Windows-PowerShell startet das Cmdlet “Set-Content”. Das ist jedoch nicht das, was wir brauchen. Wir benötigen sc.exe
– ein Befehlszeilenprogramm für die Kommunikation mit dem Dienststeuerungs-Manager und mit den Windows-Diensten.