使用C#写一个Windows服务
- 创建服务程序
可能你的VS里面没有【Windows服务】这个模板,那么你就需要通过“打开Visual Studio安装程序“,通过VisualStudio Installer来通过“修改”来安装【.NET桌面开发】
通过上面两个地方均可以进入对应的代码文件
public partial class Service1 : ServiceBase
{
public Service1()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
Console.WriteLine("服务启动");
new Thread(Run).Start();
}
protected override void OnStop()
{
Console.WriteLine("服务结束");
}
private void Run()
{
while (true)
{
Thread.Sleep(5000);
}
}
}
注意:
很多人在写服务程序时,喜欢把自己线程的代码写在Proram.cs文件中,这个是不正确的,一般都写在服务类中的OnStart方法。因为OnStart方法才是你启动了服务才要开始干的事情。Proram.cs是安装服务完成时就开始干事情了。
通过以上,我们在Visual Studio的解决方案资源管理器中的项目上 右键- 生成 即可生成需要的Windows服务程序exe。
该exe不可直接运行,否则提示
- 安装Windows服务程序
安装方式一:
以管理员身份 - (否则,日志提示“在安装的“回滚”阶段发生异常。将忽略该异常并继续回滚。但是,在完成回滚后计算机可能无法完全还原到它的初始状态。“回滚”阶段已成功完成。已完成事务处理安装。安装失败,已执行回滚”等字样)
打开CMD,进入目录【%systemroot%\microsoft.net\framework\v4.0.30319】使用工具InstallUtil.exe 工具
安装服务命令 InstallUtil F:\ProjectWorkspace\WindowsService.exe
卸载服务命令 InstallUtil /u F:\ProjectWorkspace\WindowsService.exe
安装方式二
创建安装脚本
在项目中添加2个文件如下(必须是ansi或者utf-8无bom格式):
1)安装服务脚本install.bat
%systemroot%\microsoft.net\framework\v4.0.30319\installutil.exe windowsservicetest.exe
net start servicetest
sc config servicetest start=auto
第1行安装服务
第2行为启动服务。
第3行为设置服务为自动运行。
大写数字转换器 https://daxie.dianjilingqu.com/
如果需要查看脚本运行状况,在脚本最后一行加入pause
2)卸载脚本uninstall.bat
%systemroot%\microsoft.net\framework\v4.0.30319\installutil.exe/u windowsservicetest.exe
- 1
服务安装完毕后,如图:
3. 启动服务失败
出现如下提示框 “。。。某些服务在未由其他服务或程序使用时将自动停止。”
此时我们可以在计算机日志中查找原因
- 调试服务程序
参考: