您的位置:首页 > 编程语言 > C#

.NET创建Windows服务详细步骤(C#)

2015-09-14 14:46 525 查看
http://blog.sina.com.cn/s/blog_568e66230101fuct.html

本文参考MSDN材料http://msdn.microsoft.com/en-us/library/zt39148a.aspx

创建一个Windows服务总体步骤如下:

按照Windows Service模板创建项目

添加EventLog控件,并编写OnStart和OnStop事件方法

添加Installer并设置相应属性

编译项目

安装服务

启动服务

详细方法(按英文版vs2012说明):

1、点击菜单“File | New Porject...”,打开项目模板对话框,在对话框中选取“Windows Service”选项,将此项目命名为“MyService”(注意这个名称,以后数个属性值都要设置为和此项目相同的名称)

2、在打开的项目窗口中,选定Service1的Designer,在属性中,将ServiceName和(Name)两个属性均设置为“MyService”,即和项目名相同,不要设置为其它的名称

3、在“Solution Explorer”中右击Service1.cs,单击“View Designer”,将ToolBox(工具箱)中Components下的“EventLog”控件拖放到这个Designer内

4、在“Solution Explorer”中右击Service1.cs,单击“View Code”,可以看到OnStart和OnStop方法,其中最主要的是OnStart方法,服务的运行在这个方法内,如果以前有编写调试好的代码(建议用Console的方法编写,将其中人机交互部分的界面代码全部屏蔽,因为服务是没有界面的),将代码复制粘贴到这里即可;OnStop是服务停止时发生的方法,可以在这里写入一段文字到日志中,比如说明服务停止的时间;

5、在“Solution Explorer”中右击Service1.cs,单击“View Designer”,在背景上右击(不要右击那个EventLog控件实例),再单击“Add Installer”菜单项,

6、ProjectInstaller加入,其中有两个控件,选定“serviceInstaller1”,查看其属性,确认其ServiceName属性值为“MyService”(即和第1步设定的项目名称相同),并把StartType属性设置为“Automatic”;这里有另外两个属性值要注意,分别是“DisplayName”和“Description”,分别是服务的显示名称及描述,这两个属性可以自行随意设置,Windows服务列表中显示的名称和描述即为这两个属性所制作。如果“DisplayName”为空(默认为空),则自动选定真实服务名(本例中为MyService)为显示名称

7、选定“serviceProcessInstaller1”,设置Account属性值为“LocalSystem”,LocalSystem是服务中的最高权限,其它权限相对低一些,相关内容可以查询资料;

8、在“Solution Explorer”,右击项目名(注意是项目名,不是最上面的解决方案--项目名在解决方案名正面低一个层次),在快捷菜单中点击Properties,在打开的Designer窗口中,在其中的Application页面,找到Startup object列表,选取MyService.Program(正常情况,列表中只有这一个启动项)

9、按 Ctrl + Shift + B(或者菜单“Build | Build Solution”),编译文件为.exe,一个MyService.exe文件生成,位置在项目菜单下的 \bin\debug 内

10、安装服务:请参考 使用InstallUtil.exe安装和卸载服务vs2012版

11、安装完成后,服务还需要启动。启动可以右击“我的电脑”,点击“管理”,进入找到相应的服务启动即可。

使用InstallUtil安装及卸载Windows服务的具体操作 Visual Studio 2012版本
http://blog.sina.com.cn/s/blog_568e66230101dg89.html
关于Visual Studio 2012中使用InstallUtil对Windows服务进行安装与卸载的文章,在MSDN中的http://msdn.microsoft.com/en-us/library/sd8zc8ha.aspx 有介绍,不过这个介绍还是有一些笼统,具体操作性不强,下面给出详细的操作办法:

点击左下角的开始按钮,按如下顺序“开始 - Visual
Studio 2012 - Visual
Studio Tools - Developer Command
Prompt  for VS2012”,打开一个命令窗口(不要使用传统的cmd方式打开普通DOS窗口)

在这个命令窗口中以管理员身份进入运行,具体命令是: runas /user:Administrator cmd  注意其中Administrator是具体的用户名,如果你当前的用户名是管理员身份,但用户名是Myname,就以Myname替换Administrator

该命令执行后,提示输入该用户名的密码,按要求输入(此时界面类似Linux,输入的密码无任何显示)

密码输入正确后,新开一个cmd窗口,标题是cmd(作为Myname运行)

进入创建好的服务应用目录(一般是在bin\Debug下),输入命令: installutil.exe Myservice.exe 如果安装成功,则直接显示命令提示符,没有任何信息;如果安装不成功,则会有信息出现(安装不成功下面讨论);

右击“我的电脑 - 管理 - (左栏)服务和应用程序 - 服务”,可以找到服务“Myservice”,该服务只是安装上,并没有启动,双击该服务打开属性窗口,点击启动即可

以上是一切顺利的情况下安装步骤,但实际上,很少有人可以一次安装成功,笔者也是半天功夫才安装成功。

安装失败经常出现的问题是:

1、找不到InstallUtil.exe,这个文件在.NET安装文件目录之Framework目录下,由于是使用VS2012制作的Windows服务,建议采用V4.0.xxxxxx下的InstallUtil.exe,可以直接将这个文件复制到服务文件的目录内,这样使用cmd窗口操作方便(注:低版本的InstallUtil.exe,比如v2.0.xxxxxx目录下的同名文件,在试用时也可以安装与卸载);

2、InstallUtil.exe可以单独运行,即不带参数时可以运行并显示相应的操作帮助,但如果该命令后带服务应用名进行安装时,即使用
installutil.exe Myservice.exe 命令时,安装失败,失败信息其中一条是:

An exception occurred during the Install phase.

System.Security.SecurityException: The source was not found, but some or all event logs could not be searched.  Inaccessible logs: Security.

这条信息可以在cmd窗口中看到,也可以在服务目录中的InstallUtil.InstallLog日志文件中看到(使用记事本打开它),可以看出是由于安全原因无法访问源文件。

其实质问题仍然是权限不够。虽然我们以管理员身份打开了VS2012的cmd窗口,但文件InstallUtil和服务文件Myservice不是以管理员身份运行的,解决办法是:在资源管理器中右击InstallUtil.exe文件,单击属性,在打开的属性窗口的"兼容性"标签,勾选特权等级下的“以管理员身份运行此程序”,确定退出;以同样的方法操作服务文件Myservice。完成上述工作,重新执行上述步骤的第5步,即安装成功。

卸载Windows服务,使用/u参数即可。命令为:

installutil /u Myservice.exe
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: