C#创建Windows服务需基于.NET Framework,继承ServiceBase并重写OnStart/OnStop;添加安装程序设置ServiceName和Account;用管理员权限的InstallUtil.exe安装;调试需条件编译模拟控制台运行。

C#创建Windows服务的基本步骤
Windows服务是后台运行的长期进程,不依赖用户登录。用C#开发需借助System.ServiceProcess命名空间,核心是继承ServiceBase类并重写OnStart和OnStop方法。
编写一个最简Windows服务
新建“Windows Service (.NET Framework)”项目(注意:.NET Core/.NET 5+需用Worker Service替代,原生ServiceBase仅支持.NET Framework)。
- 在Service1.cs中重写关键方法:
protected override void OnStart(string[] args)
{
File.AppendAllText(@"C:\log.txt", $"服务启动于 {DateTime.Now}\r\n");
}
protected override void OnStop()
{
File.AppendAllText(@"C:\log.txt", $"服务停止于 {DateTime.Now}\r\n");
}
- 确保项目属性 → 应用程序 → 目标框架为.NET Framework(如4.7.2)
- 右键项目 → “添加” → “安装程序”,自动生成ProjectInstaller.cs
- 选中serviceInstaller1,设置ServiceName(必须与服务实际名称一致,如“MySampleService”)
- 选中serviceProcessInstaller1,设置Account为LocalSystem(或NetworkService等)
编译并安装服务
安装不是双击exe,必须用命令行工具InstallUtil.exe(随.NET Framework安装)。
- 以管理员身份打开开发者命令提示符(Developer Command Prompt for VS)
- 执行:InstallUtil.exe "D:\MyService\bin\Debug\MyService.exe"
- 若报错“无法加载类型”,检查是否遗漏安装程序组件,或目标框架不匹配
- 安装成功后,在“服务”管理器(services.msc)中可看到服务,状态为“已停止”
- 右键启动,或运行:net start MySampleService
调试与卸载技巧
服务不能直接F5调试,需模拟运行环境。
- 快速调试法:在Main()中加判断,开发时以控制台方式运行:
#if DEBUG
Service1 myService = new Service1();
myService.OnStart(null);
Console.WriteLine("按任意键停止..."); Console.ReadKey();
myService.OnStop();
#else
ServiceBase[] ServicesToRun = new ServiceBase[]{new Service1()};
ServiceBase.Run(ServicesToRun);
#endif
- 卸载服务命令:InstallUtil.exe /u "D:\MyService\bin\Debug\MyService.exe"
- 若卸载失败,先用net stop MySampleService停止,再检查事件查看器中的错误日志
- 服务日志建议写入EventLog而非文件,避免权限问题
基本上就这些。关键点是框架匹配、安装程序配置、管理员权限执行安装。不复杂但容易忽略细节。










