Windows服務透過 InstallUtil.exe 命令列安裝與解除安裝,以及常見問題排解
一、使用命令列安裝、解除安裝 Windows 服務
1. 使用工具
微軟提供 InstallUtil.exe,用來安裝及解除安裝 .NET Windows 服務。
InstallUtil.exe會依據 .NET Framework 版本有所區分,工具版本和專案目標框架不一致,就會直接安裝失敗;- 請把對應版本的
InstallUtil.exe複製到服務程式的Debug輸出目錄,和服務 exe 放在同一層。
InstallUtil 是 .NET SDK 的一部分,安裝不同版本 SDK,就會對應不同版本的 InstallUtil。
.NET Framework 4.0 / 4.5 / 4.6 / 4.7 / 4.8(最常使用),32位元與64位元版本也互相獨立。
64位元範例路徑:C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe
.NET 5 /.NET 6 /.NET 7 /.NET 8 /.NET 9(.NET Core 系列)並沒有內建 InstallUtil.exe
2. 檔案目錄結構(Debug目錄)
WindowsServiceDemo.exe // Windows服務主程式
WindowsServiceDemo.pdb
InstallUtil.exe // 複製過來的安裝工具
install.bat // 安裝腳本
uninstall.bat // 解除安裝腳本
log.txtCode language: JavaScript (javascript)
3. 撰寫批次腳本
install.bat 【安裝服務】
d:
cd D:\WindowsService3\WindowsService3\bin\Debug
InstallUtil WindowsServicePicture.exe
pauseCode language: CSS (css)
uninstall.bat 【解除安裝服務】
d:
cd D:\WindowsService3\WindowsService3\bin\Debug
InstallUtil /u WindowsServicePicture.exe
pause
參數說明:
/u= uninstall,代表解除安裝服務
務必滑鼠右鍵,以系統管理員身分執行CMD / 直接右鍵以管理員執行bat檔;權限不足會擲出安全性例外,安裝直接失敗並自動復原。
二、Windows服務安裝常見問題與處理方案
問題根本原因整理
安裝失敗主要有兩大因素:
- 服務專案編譯平台、.NET版本與 InstallUtil.exe 版本不相符;
- 缺少管理員權限,觸發系統安全攔截。
異常1:BadImageFormatException
錯誤訊息
System.BadImageFormatException: 無法載入檔案或組件 "WindowsServiceDemo, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" 或其相依性的其中之一。嘗試載入格式不正確的程式。Code language: JavaScript (javascript)
發生原因
專案編譯目標平台(x86/x64/AnyCPU)和 InstallUtil.exe 的位元數不一致,或是 .NET 版本不匹配。
解決辦法
- 專案設定改用
x86進行編譯建置; - 使用和專案框架版本對應的 InstallUtil.exe;
異常2:SecurityException 安全性權限錯誤(很常遇到)
錯誤訊息
在「安裝」階段發生例外。
System.Security.SecurityException: 找不到來源,但無法搜尋部分或全部事件記錄檔。無法存取的記錄檔: Security。
開始安裝的「復原」階段。
安裝失敗,已執行復原。Code language: CSS (css)
完整記錄檔路徑範例:
H:\專案原始碼\WindowsServiceDemo\WindowsServiceDemo\bin\Debug\WindowsServiceDemo.InstallLogCode language: CSS (css)
根本原因
命令列或是 Visual Studio 沒有管理員權限,無法讀寫系統事件記錄檔。
標準處理方式
- Visual Studio:滑鼠右鍵【以系統管理員身分執行VS】,打開專案重新編譯;
- CMD / bat腳本:滑鼠右鍵 → 以管理員身分啟動;
- 專案編譯平台選擇
x86建置。
安裝成功判斷依據
主控台輸出內容:
「認可」階段已順利完成。
已完成交易式安裝。
此時開啟 Windows 服務清單(services.msc),就能看到註冊完成的服務。
服務的安裝與解除安裝
Previous: 第一個 Windows Service