0

0

c# 如何创建windows服务

月夜之吻

月夜之吻

发布时间:2026-01-22 04:13:21

|

585人浏览过

|

来源于php中文网

原创

Windows服务项目模板在VS 2019+中已被移除,应使用Worker Service模板(.NET 6+),通过sc.exe注册为系统服务,并确保Program.cs中调用host.Run()阻塞主线程。

c# 如何创建windows服务

Windows 服务项目模板在哪

Visual Studio 2019 及之后版本默认**已移除** Windows Service 项目模板。不是你没找到,是它真没了。若用较新版本新建项目,Windows Forms AppConsole App 都不能直接当服务跑——它们缺少服务生命周期管理入口。

正确路径是:新建项目 → 搜索 “Worker Service” → 选中 .NET 6+ 的模板。这是微软当前推荐的 Windows 服务实现方式,底层基于 IHostedService,比老式 ServiceBase 更轻量、更可控。

  • 老式 ServiceBase 仍可用,但需手动添加 System.ServiceProcess.ServiceController NuGet 包(.NET Core/.NET 5+)
  • Worker Service 模板生成的是跨平台主机,但部署到 Windows 并注册为服务时,行为完全等同传统 Windows 服务
  • 不要试图在 WinForms 或 WPF 项目里“加个服务类”就完事——GUI 线程模型和服务 SCM(Service Control Manager)不兼容,启动必失败

如何把 Worker Service 注册为系统服务

核心命令是 sc.exe,必须以管理员权限运行。注册前确保已发布为自包含(self-contained)或框架依赖(framework-dependent)可执行文件。

假设发布后路径为 C:\MyService\MyService.exe,执行:

sc create "MyServiceName" binPath= "C:\MyService\MyService.exe" start= auto obj= "LocalSystem"

注意:binPath= 后面**必须有空格**,且路径含空格时要加英文双引号;obj= 指定运行账户,LocalSystem 权限高但风险大,生产环境建议用专用服务账户。

千博购物系统.Net
千博购物系统.Net

千博购物系统.Net能够适合不同类型商品,为您提供了一个完整的在线开店解决方案。千博购物系统.Net除了拥有一般网上商店系统所具有的所有功能,还拥有着其它网店系统没有的许多超强功能。千博购物系统.Net适合中小企业和个人快速构建个性化的网上商店。强劲、安全、稳定、易用、免费是它的主要特性。系统由C#及Access/MS SQL开发,是B/S(浏览器/服务器)结构Asp.Net程序。多种独创的技术使

下载
  • 启动服务:sc start "MyServiceName"
  • 查看状态:sc query "MyServiceName"(返回 STATE: 4 RUNNING 才算成功)
  • 卸载服务:sc delete "MyServiceName"(删除前先 sc stop
  • 日志输出默认写入 Windows 事件查看器 → “Windows 日志 → 应用程序”,不是控制台

为什么服务启动后立即退出

最常见原因是 Program.cs 中的主机未被阻塞,进程自然结束。Worker Service 默认使用 Host.CreateDefaultBuilder(),但若你删了 .Run() 或替换成 .Start() 就会出问题。

正确结构必须包含:

var host = Host.CreateDefaultBuilder(args)
    .ConfigureServices(services =>
    {
        services.AddHostedService();
    })
    .Build();

host.Run(); // ← 这行不能少,也不能换成 Start()

  • host.Start() 是异步启动,不阻塞主线程,进程立刻退出
  • host.Run() 内部调用 StartAsync() + 阻塞等待 Ctrl+C 或服务停止信号
  • 若需调试,可在 Main 方法末尾加 Console.ReadLine()(仅开发时),但正式部署必须用 Run()
  • 检查 MyBackgroundServiceExecuteAsync(CancellationToken) 是否抛异常——未捕获异常会导致服务崩溃并被 SCM 标记为“已停止”

如何让服务能访问网络或文件系统

Windows 服务默认以 LocalSystem 账户运行,对本地资源权限足够,但对网络路径(如 \\server\share)、映射驱动器、交互式桌面(UI)、用户配置文件%USERPROFILE%)均无访问权。

  • 访问 UNC 路径:改用域名账户(DOMAIN\svcuser),并在目标服务器上授予权限;或改用 \\ip\share 并启用 SMB 签名兼容模式
  • 读写用户目录:不要硬编码 %USERPROFILE%,改用 Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)
  • 需要弹窗或操作桌面?别这么做。Windows 服务设计上禁止交互;如真需 GUI,请改用启动类型为 Interactive 的旧式服务(不推荐,Win10/11 已限制)
  • 调试时看到“拒绝访问”错误,先查事件查看器里的详细异常堆,再确认服务账户权限,而不是盲目加 RequireAdministrator

服务注册和调试的坑集中在权限、路径、生命周期三处。哪怕代码逻辑完全正确,sc create 少个空格、host.Run() 写成 Start()、服务账户没权限访问目标文件夹,都会导致“安装成功但无法启动”。

相关文章

Windows激活工具
Windows激活工具

Windows激活工具是正版认证的激活工具,永久激活,一键解决windows许可证即将过期。可激活win7系统、win8.1系统、win10系统、win11系统。下载后先看完视频激活教程,再进行操作,100%激活成功。

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

392

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

572

2023.08.10

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

392

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

572

2023.08.10

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

482

2023.08.10

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

482

2023.08.10

数据库Delete用法
数据库Delete用法

数据库Delete用法:1、删除单条记录;2、删除多条记录;3、删除所有记录;4、删除特定条件的记录。更多关于数据库Delete的内容,大家可以访问下面的文章。

269

2023.11.13

drop和delete的区别
drop和delete的区别

drop和delete的区别:1、功能与用途;2、操作对象;3、可逆性;4、空间释放;5、执行速度与效率;6、与其他命令的交互;7、影响的持久性;8、语法和执行;9、触发器与约束;10、事务处理。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

210

2023.12.29

AO3中文版入口地址大全
AO3中文版入口地址大全

本专题整合了AO3中文版入口地址大全,阅读专题下面的的文章了解更多详细内容。

1

2026.01.21

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.5万人学习

Excel 教程
Excel 教程

共162课时 | 12.7万人学习

PHP基础入门课程
PHP基础入门课程

共33课时 | 2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号