服務的安裝與解除安裝

Windows服務透過 InstallUtil.exe 命令列安裝與解除安裝,以及常見問題排解

一、使用命令列安裝、解除安裝 Windows 服務

1. 使用工具

微軟提供 InstallUtil.exe,用來安裝及解除安裝 .NET Windows 服務。

  1. InstallUtil.exe 會依據 .NET Framework 版本有所區分,工具版本和專案目標框架不一致,就會直接安裝失敗;
  2. 請把對應版本的 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服務安裝常見問題與處理方案

問題根本原因整理

安裝失敗主要有兩大因素:

  1. 服務專案編譯平台、.NET版本與 InstallUtil.exe 版本不相符;
  2. 缺少管理員權限,觸發系統安全攔截。
異常1:BadImageFormatException

錯誤訊息

System.BadImageFormatException: 無法載入檔案或組件 "WindowsServiceDemo, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" 或其相依性的其中之一。嘗試載入格式不正確的程式。Code language: JavaScript (javascript)

發生原因
專案編譯目標平台(x86/x64/AnyCPU)和 InstallUtil.exe 的位元數不一致,或是 .NET 版本不匹配。
解決辦法

  1. 專案設定改用 x86 進行編譯建置;
  2. 使用和專案框架版本對應的 InstallUtil.exe;
異常2:SecurityException 安全性權限錯誤(很常遇到)

錯誤訊息

在「安裝」階段發生例外。
System.Security.SecurityException: 找不到來源,但無法搜尋部分或全部事件記錄檔。無法存取的記錄檔: Security。

開始安裝的「復原」階段。
安裝失敗,已執行復原。Code language: CSS (css)

完整記錄檔路徑範例:

H:\專案原始碼\WindowsServiceDemo\WindowsServiceDemo\bin\Debug\WindowsServiceDemo.InstallLogCode language: CSS (css)

根本原因
命令列或是 Visual Studio 沒有管理員權限,無法讀寫系統事件記錄檔。

標準處理方式

  1. Visual Studio:滑鼠右鍵【以系統管理員身分執行VS】,打開專案重新編譯;
  2. CMD / bat腳本:滑鼠右鍵 → 以管理員身分啟動
  3. 專案編譯平台選擇 x86 建置。
安裝成功判斷依據

主控台輸出內容:

「認可」階段已順利完成。
已完成交易式安裝。

此時開啟 Windows 服務清單(services.msc),就能看到註冊完成的服務。

服務的安裝與解除安裝

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *