服务的安装和卸载

Windows服务 使用InstallUtil.exe命令行安装卸载 和 常见故障解决

一、使用命令行安装、卸载Windows服务

1. 工具

微软提供 InstallUtil.exe 用于 .NET Windows服务的安装与卸载。

  1. InstallUtil.exe 区分.NET Framework版本,工具版本和项目目标框架不匹配,会直接安装失败;
  2. 需要将对应版本的 InstallUtil.exe 复制到服务程序 Debug 输出目录(与服务exe同级)。

InstallUtil工具是属于.NET SDK的一部分的,你安装不同的版本,就会有不同的InstallUtil。

.NET Framework 4.0 / 4.5 / 4.6 / 4.7 / 4.8(最常用)32位和64位也是不一样的。

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe 例如这是64位。

.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),即可看到注册好的服务。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注