C# 将Framework4.8控制台程序注册为windows服务
这里讲的是.Net Framework4.8的方式,后续的各类Net Core版本则是另一种方式,
1,要先有一个net4.8的控台程序
2,在控制台项目上右键新建项,找到Windows服务,选中,添加
3,将原控制台中Main中的代码全部移动到Service1.cs的OnStart方法中(选中Service1.cs右键查看代码或者F7进入代码页),注意OnStart中的代码不能阻塞,如果有类似阻塞监听之类的操作,需要将其放到异步线程中,还有就是注册为Windows服务后,Environment.CurrentDirectory属性的值会变为“C:\Windows\System32”,如果要定位到应用程序的跟目录,可以使用AppDomain.CurrentDomain.BaseDirectory
4,将原控制台Program的Main修改为
static void Main(string[] args) { ServiceBase.Run(new Service1()); }
5,在Service1.cs的设计界面右键添加安装程序,项目中会多了ProjectInstaller.cs项
6,在ProjectInstaller.cs设计界面右键serviceProcessInstaller1,进入属性界面,将Account改为LocalSystem
7,在ProjectInstaller.cs设计界面右键serviceInstaller1,进入属性界面,修改其中的ServiceName(服务名称),DisplayName(显示名称),Description(描述)为你想要的信息,比如,将ServiceName对应的值改为TestRegWinService,将DisplayName的值改为“测试注册windows服务”,Description改为“用来测试将应用程序注册为windows服务”
8,去C:\Windows\Microsoft.NET\Framework\v4.0.30319文件夹下,找到InstallUtil.exe,后续需要用到它来注册服务,
9,生成项目后,在项目的根目录下创建一个新文件夹“安装卸载脚本”,然后将InstallUtil.exe拷贝到该文件夹下
10,再在安装卸载脚本文件夹下创建两个cmd文件,install.cmd和uninstall.cmd,假如生成的exe为TestRegWinService.exe,那么2个文件的内容分别为:
install.cmd
cd /d %~dp0
InstallUtil.exe ..\TestRegWinService.exe
pause
uninstall.cmd
cd /d %~dp0 InstallUtil.exe ..\TestRegWinService.exe /u pause
最后,以管理员运行install.cmd就能安装服务,运行uninstall.cmd,则能卸载服务
cd /d %~dp0的意思是重新定位到当前文件夹,因为以管理员运行会导致默认路径在c盘
InstallUtil.exe 后面跟上相对路径,就能执行注册服务的操作
如果路径后面再加上/u,则执行卸载操作
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~