Windows‑Dienste: Installation und Deinstallation über die InstallUtil.exe‑Befehlszeile sowie Lösungen für häufige Fehler
1. Installieren und Deinstallieren von Windows‑Diensten über die Befehlszeile
1. Werkzeug
Microsoft stellt InstallUtil.exe für die Installation und Deinstallation von .NET‑Windows‑Diensten zur Verfügung.
InstallUtil.exeist an die jeweilige .NET‑Framework‑Version gebunden. Stimmen Werkzeug‑Version und Zielframework des Projekts nicht überein, schlägt die Installation direkt fehl;- Kopieren Sie die passende Version von
InstallUtil.exein dasDebug‑Ausgabeverzeichnis des Dienstprogramms (gleicher Ordner wie die Dienst‑EXE‑Datei).
InstallUtil ist Bestandteil des .NET‑SDK. Je nach installierter SDK‑Version liegt eine andere InstallUtil‑Ausgabe vor.
.NET Framework 4.0 / 4.5 / 4.6 / 4.7 / 4.8 (am häufigsten verwendet) unterscheidet zudem zwischen 32‑Bit‑ und 64‑Bit‑Ausführungen.
Beispielpfad für die 64‑Bit‑Version: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe
.NET 5 /.NET 6 /.NET 7 /.NET 8 /.NET 9 (.NET Core‑Reihe) enthält keine InstallUtil.exe
2. Verzeichnis‑ und Dateistruktur (Debug‑Ordner)
WindowsServiceDemo.exe // Hauptprogramm des Windows‑Dienstes
WindowsServiceDemo.pdb
InstallUtil.exe // Kopiertes Installationswerkzeug
install.bat // Installations‑Skript
uninstall.bat // Deinstallations‑Skript
log.txtCode-Sprache: JavaScript (javascript)
3. Erstellen von Batch‑Skripten
install.bat 【Dienst installieren】
d:
cd D:\WindowsService3\WindowsService3\bin\Debug
InstallUtil WindowsServicePicture.exe
pauseCode-Sprache: CSS (css)
uninstall.bat 【Dienst deinstallieren】
d:
cd D:\WindowsService3\WindowsService3\bin\Debug
InstallUtil /u WindowsServicePicture.exe
pause
Parametererklärung:
/u= uninstall, steht für die Deinstallation eines Dienstes
Sie müssenmit der rechten Maustaste CMD als Administrator ausführen oder die bat‑Datei direkt mit Administratorrechten starten. Fehlende Berechtigungen lösen eine Sicherheitsausnahme aus, die Installation schlägt fehl und wird automatisch rückgängig gemacht.
2. Häufige Probleme bei der Installation von Windows‑Diensten und Lösungsansätze
Zusammenfassung der Hauptursachen
Zwei wesentliche Gründe für fehlgeschlagene Installationen:
- Die Kompilierplattform des Dienstprojekts, die .NET‑Version und die Version von InstallUtil.exe passen nicht zueinander;
- Fehlende Administratorrechte führen zu einer sicherheitsbedingten Systemblockierung.
Ausnahme 1: BadImageFormatException
Fehlermeldung
System.BadImageFormatException: Die Datei oder Assembly "WindowsServiceDemo, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" oder eine ihrer Abhängigkeiten konnte nicht geladen werden. Es wurde versucht, ein Programm mit falschem Format zu laden.Code-Sprache: PHP (php)
Ursache
Es besteht eine Abweichung zwischen der Zielplattform der Kompilierung (x86/x64/AnyCPU) und der Bit‑Breite von InstallUtil.exe oder die .NET‑Version ist inkompatibel.
Lösung
- Stellen Sie im Projekt ein, dass mit
x86kompiliert wird; - Verwenden Sie die InstallUtil.exe‑Version, die zum Zielframework des Projekts passt;
Ausnahme 2: SecurityException‑Sicherheitsberechtigungsfehler (häufig auftretend)
Fehlermeldung
Während der Installationsphase ist eine Ausnahme aufgetreten.
System.Security.SecurityException: Die Quelle wurde nicht gefunden, aber einige oder alle Ereignisprotokolle konnten nicht durchsucht werden. Nicht zugreifbares Protokoll: Security.
Die Rollback‑Phase der Installation wird gestartet.
Die Installation ist fehlgeschlagen, ein Rollback wurde ausgeführt.Code-Sprache: PHP (php)
Beispiel für einen vollständigen Protokollpfad:
H:\Projektquellcode\WindowsServiceDemo\WindowsServiceDemo\bin\Debug\WindowsServiceDemo.InstallLogCode-Sprache: CSS (css)
Hauptursache
Die Befehlszeile oder Visual Studio läuft ohne Administratorrechte und kann daher die Systemereignisprotokolle nicht lesen oder schreiben.
Standard‑Lösungen
- Visual Studio: Rechtsklick → Als Administrator ausführen, Projekt öffnen und neu kompilieren;
- CMD / bat‑Skript: Rechtsklick → Als Administrator starten;
- Wählen Sie für die Projektkompilierung die Plattform
x86aus.
Hinweis für eine erfolgreiche Installation
Konsolenausgabe:
Die Commit‑Phase wurde erfolgreich abgeschlossen.
Die transaktionsbasierte Installation ist abgeschlossen.Code-Sprache: PHP (php)
Öffnen Sie anschließend die Liste der Windows‑Dienste (services.msc), dort sehen Sie den neu registrierten Dienst.
Installation und Deinstallation von Diensten