C#如何创建Windows服务 C#编写和安装Windows Service教程

来源:这里教程网 时间:2026-02-21 17:35:34 作者:

C#创建Windows服务的基本步骤

Windows服务是后台运行的长期进程,不依赖用户登录。用C#开发需借助System.ServiceProcess命名空间,核心是继承ServiceBase类并重写OnStartOnStop方法。

编写一个最简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,设置AccountLocalSystem(或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而非文件,避免权限问题

基本上就这些。关键点是框架匹配、安装程序配置、管理员权限执行安装。不复杂但容易忽略细节。

相关推荐