设为首页 加入收藏

TOP

创建、设置和安装Windows服务(一)
2017-10-11 17:19:58 】 浏览:9780
Tags:创建 设置 安装 Windows 服务

文章大部分内容转自:http://www.cnblogs.com/greatandforever/archive/2008/10/14/1310504.html;和:http://www.cnblogs.com/xujie/p/5695673.html;部分是我自己后来的一些理解添加进去的。

正文:在网上看了一些示例,大部分都言过其实,把过程搞得太过复杂,老是需要去研究如何利用InstallUtil.exe及其参数。事实上,既然要安装.net下制作的windows服务,肯定首先得在目标机器上安装有.net框架。因此,InstallUtil.exe也一定已经存在目标机器上了,因而利用微软的傻瓜式操作就能很好地解决windows服务安装和卸载的问题。

过一段时间估计还要狠狠地利用windows服务来完成一些功能,为了加深印象,又回过头弄了一个名叫HelloWorldService的windows服务,用最简单的demo来完成所有的操作。这个服务的功能,仅仅是在它启动的时候创建一个HelloWorld.txt文件,里边写上Hello World!这几个简单的字母而已。

1、新建windows服务项目,我这里选择的是Framework4.0,没有选择高版本是为了防止在服务在一些低版本系统上无法正常运行。

2、新建的Windows 服务项目如图右侧所示,双击Service1.cs,出现左侧Windows 服务的 设计界面,对左侧界面右击,点击 添加安装程序(用于添加Windows 服务的安装程序)。

这里貌似不需要修改Service1.cs设计界面的属性列表中的ServiceName值(该值默认是Service1),这个值会被添加的安装程序(ProjectInstaller.cs)中设计界面的serviceInstaller1的属性列表中的ServiceName的值覆盖/替代,故更改serviceInstaller1中的ServiceName值就可以了,该值就是sc delete XXX 的XXX的值。

3、添加安装程序后项目中会生成带有默认配置的ProjectInstaller.cs文件,如图右侧(看图标样子应该也是个服务文件,和Service1.cs对应),左侧是该文件(服务)的设计界面

4、新建完安装程序后,需要给ProjectInstaller.cs中默认的serviceInstaller1和serviceProcessInstaller1做一些基本的属性设置。如下图:

4.1、serviceInstaller1的配置:

图1:

ServiceInstaller安装一个类,该类扩展 ServiceBase 来实现服务。在安装服务应用程序时由安装实用工具调用该类。在这里主要修改其StartType属性。此值指定了服务的启动模式。

Automatic 指示服务在系统启动时将由(或已由)操作系统启动。如果某个自动启动的服务依赖于某个手动启动的服务,则手动启动的服务也会在系统启动时自动启动。 
Disabled 指示禁用该服务,以便它无法由用户或应用程序启动。 
Manual 指示服务只由用户(使用“服务控制管理器”)或应用程序手动启动。 

图2:

这里作下解释(解释以这里的为准,图片上的描述及名字的解释有些不准):上图中的Description是系统(Windows)服务中对应的服务的描述,而DisplayName该服务的名称,而ServiceName则是

Windows 任务管理器的服务页的对应项的名称;这三个名字都可以用中文,但是ServiceName最好用英文(这个值就是 sc delete XXX的XXX对应的值)

4.2、serviceProcessInstaller1的配置:

图1:

ServiceProcessInstall安装一个可执行文件,该文件包含扩展 ServiceBase 的类。该类由安装实用工具(如 InstallUtil.exe)在安装服务应用程序时调用。在这里主要是修改其Account属性。

ServiceAccount指定服务的安全上下文,安全上下文定义其登录类型。

LocalService    充当本地计算机上非特权用户的帐户,该帐户将匿名凭据提供给所有远程服务器。 
LocalSystem    服务控制管理员使用的帐户,它具有本地计算机上的许多权限并作为网络上的计算机。 
NetworkService    提供广泛的本地特权的帐户,该帐户将计算机的凭据提供给所有远程服务器。 
User    由网络上特定的用户定义的帐户。如果为 ServiceProcessInstaller.Account 成员指定 User,则会使系统在安装服务时提示输

入有效的用户名和密码,除非您为 ServiceProcessInstaller 实例的 Username 和 Password 这两个属性设置值。

图2:

这里也作下解释:设置Account为LocalSystem就相当于在启动该服务时是以管理员权限来启动的。如果上图的Account不设置为LocalSystem而是LocalService可能启动服务会出现以下错误:

想知道原因可以在系统的”事件查看器“中的”应用程序“选项中查看具体的错误信息,如下图:

 上图的错误原因是是由于服务对文件系统的操作权限问题所引起的,将serviceProcessInstaller1中的Account由LocalService改成LocalSystem就行了。

5、以上工作完成,安装程序配置完毕,接下来添加应用程序配置文件(如果有需要的话,很多服务项目默认有一个App.config文件的一般是不需要添加),如图:

6、编写windows服务主代码:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.ComponentModel;
 4 using System.Data;
 5 using System.Diagnostics;
 6 using System.Linq;
 7 using System.ServiceProcess;
 8 using System.Text;
 9  
10 using System.IO;
11  
12 namespace OrganizClientSocketService
13 {
14     public partial class Service1 : ServiceBase
15     {
16         private MainService _mainServ;
17         public Service1()
18         {
19             InitializeComponent();
20         }
21  
22          // 开启服务要执行的代码
23         protected override void OnStart(string[] args)
24         {
25             _mainServ = new MainService();
26             _mainServ.Start();  // 开启服务
27         }
28 
29
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Win7 关闭Window update 下一篇MFC U盘检测

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目