Windows服务搭建(C#)
创建windows服务流程
1.C#工程中新建windows服务
2.Service1改名-想要的名字
3.在视图中新建安装程序
4.右键serviceInsraller1,选择属性,将ServiceName的值改为ServiceTest,还可以再Description中写上对服务的描述。
5.右键serviceProcessInsraller1,选择属性,将Account的值改为LocalSystem。
(服务包括的函数)
Windows服务并不像一般应用程序那样直接运行,需要其它的东西。这里由几个简单的批处理程序来控制安装,卸载,开始,停止。
Install.bat 这个批处理第一次用遇到了很多问题,改了很久。发现是相对路径居然无效,就是直接用下面这个代码不行。
C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\installutil WindowsServiceLog.exe
这个居然会错,就算批处理在Debug调试目录下,后来试了下绝对路径居然又正常了,百思不得其解。想到如果要移植就不能用绝对路径,那么就用代码来获取绝对路径,于是就改成这样了。
@echo off @echo 安装WindowService中,请等待。。。 C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\installutil %~dp0WindowsServiceLog.exe @echo 安装成功! @echo 正在启动服务。。。 Net Start ServiceTest sc config ServiceTest Start= auto @echo 服务启动成功! pause
卸载就简单多了,也是和上面同样的道理。
%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe /u %~dp0WindowsServiceLog.exe pause
服务的开启和关闭。其实安装服务的时候就用代码开启了。
一直不太清楚sc和Nat命令区别,对服务的开关来说,反正都可以用。
Net Start ServiceTest
Net Stop ServiceTest
sc Start ServiceTest
sc Stop ServiceTest
删除服务
sc delete ServiceTest
查看服务状态
sc query ServiceTest
卸载服务中居然遇到了一个奇怪的问题,“服务已标记删除!” ,没法卸载,没法启动,没法重新安装,我还去了注册表找到这个服务删除结果还是没用。。。结果居然是------》
-----》需要先关闭计算机管理-服务 这个窗口。(撞墙)
控制服务的时候运行*.bat,如果不以管理员身份运行就会出错。为此特别增加了一个对管理员权限的判断,如果不是管理员则提示。下面以安装服务为例,其它类似
1 @ECHO OFF 2 fsutil >nul 3 if errorlevel 1 (goto error ) 4 @echo 安装WindowService中,请等待。。。 5 C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\installutil %~dp0WindowsServiceLog.exe 6 pause 7 exit 8 :error 9 echo 请右键以管理员身份运行此程序! 10 pause 11 exit
(待完成。。)