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

(待完成。。)

posted @ 2015-10-21 16:03  小书丶  阅读(513)  评论(0编辑  收藏  举报