技术成就梦想

知道用户需求,做到专注!c#,donet,Frameworks,UML,面向对象,设计模式!
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

用C#创建Windows服务(Windows Services)并打包!

Posted on 2011-07-22 13:14  我不是高手  阅读(979)  评论(0编辑  收藏  举报

用C#创建Windows服务(Windows Services)

Windows服务在Visual Studio 以前的版本中叫NT服务,在VS.net启用了新的名称。用Visual C# 创建Windows服务不是一件困难的事,本文就将指导你一步一步创建一个Windows服务并使用它。这个服务在启动和停止时,向一个文本文件中写入一些文字信息。

第一步:创建服务框架
要创建一个新的 Windows 服务,可以从Visual C# 工程中选取 Windows 服务(Windows Service)选项,给工程一个新文件名,然后点击 确定。

你可以看到,向导向工程文件中增加WebService1.cs类:

其中各属性的含意是:

ü         Autolog                 是否自动写入系统的日志文件

ü         CanHandlePowerEvent     服务时候接受电源事件

ü         CanPauseAndContinue          服务是否接受暂停或继续运行的请求

ü         CanShutdown 服务是否在运行它的计算机关闭时收到通知,以便能够调用 OnShutDown 过程

ü         CanStop                              服务是否接受停止运行的请求

ü         ServiceName                       服务名

 

第二步:向服务中增加功能
在 .cs代码文件中我们可以看到,有两个被忽略的函数 OnStart和OnStop。

OnStart函数在启动服务时执行,OnStop函数在停止服务时执行。在这里,当启动和停止服务时,向一个文本文件中写入一些文字信息,代码如下:

protected override void OnStart(string[] args)

{

FileStream fs = new FileStream(@"d:\mcWindowsService.txt" , FileMode.OpenOrCreate, FileAccess.Write);

StreamWriter m_streamWriter = new StreamWriter(fs);

m_streamWriter.BaseStream.Seek(0, SeekOrigin.End);

m_streamWriter.WriteLine("mcWindowsService:         Service Started"+DateTime.Now.ToString()+"\n");

m_streamWriter.Flush();

m_streamWriter.Close();

fs.Close();

 

}

 

protected override void OnStop()

{

FileStream fs = new FileStream(@"d:\mcWindowsService.txt" , FileMode.OpenOrCreate, FileAccess.Write);

StreamWriter m_streamWriter = new StreamWriter(fs);

m_streamWriter.BaseStream.Seek(0, SeekOrigin.End);

m_streamWriter.WriteLine(" mcWindowsService: Service Stopped "+DateTime.Now.ToString()+"\n");

m_streamWriter.Flush();

m_streamWriter.Close();

fs.Close();

}

第三步: 将安装程序添加到服务应用程序

Visual Studio.NET 随附有安装组件,可用来安装与服务应用程序相关联的资源。安装组件在正在安装到的系统上注册一项单个的服务,并使服务控制管理器知道该服务的存在。

要正确安装服务,并不需要在安装程序中进行任何特殊编码。但是,如果需要向安装进程添加特殊功能,则可能偶尔需要修改安装程序的内容。

       将安装程序添加到服务应用程序的步骤是:

1:在解决方案中,访问要向其中添加安装组件的服务的Design视图。

2:在属性窗口中,单击添加安装程序链接

这时项目中就添加了一个新类 ProjectInstaller 和两个安装组件 ServiceProcessInstaller 和 ServiceInstaller,并且服务的属性值被复制到组件。

3:若要确定如何启动服务,请单击 ServiceInstaller 组件并将 StartType 属性设置为适当的值。

ü         Manual      服务安装后,必须手动启动。

ü         Automatic    每次计算机重新启动时,服务都会自动启动。

ü         Disabled     服务无法启动。

4:将serviceProcessInstaller类的Account属性改为 LocalSystem

     这样,不论是以哪个用户登录的系统,服务总会启动。

 

第四步:生成服务程序

通过从生成菜单中选择生成来生成项目。

注意   不要通过按 F5 键来运行项目——不能以这种方式运行服务项目。

第五步:安装服务

访问项目中的已编译可执行文件所在的目录。
用项目的输出作为参数,从命令行运行 InstallUtil.exe。在命令行中输入下列代码:
installutil yourproject.exe
卸载服务

用项目的输出作为参数,从命令行运行 InstallUtil.exe。

installutil /u yourproject.exe

http://www.cnblogs.com/laiwen/archive/2005/08/21/219590.html

打包:

为服务创建安装项目

在“文件”菜单上指向“添加项目”,然后选择“新建项目”。
在“项目类型”窗格中选择“安装和部署项目”文件夹。
在“模板”窗格中选择“安装项目”。将项目命名为 MyServiceSetup。
安装项目随即添加到解决方案。

然后,将 Windows 服务项目的输出 MyNewService.exe 添加到安装项目中。

向安装项目添加 MyNewService.exe

在解决方案资源管理器中,右击“MyServiceSetup”,指向“添加”,然后选择“项目输出”。
出现“添加项目输出组”对话框。

在“项目”框中选择“MyNewService”。
在列表框中,选择“主输出”,然后单击“确定”。
MyNewService 的主输出的项目项被添加到安装项目中。现在添加自定义操作以安装 MyNewService.exe 文件。

向安装项目添加自定义操作

在解决方案资源管理器中右击安装项目,指向“视图”,然后选择“自定义操作”。
出现自定义操作编辑器。

在“自定义操作”编辑器中右击“自定义操作”节点,然后选择“添加自定义操作”。
出现“选择项目中的项”对话框。

在列表框中双击“应用程序文件夹”将其打开,选择“主输出来自 MyNewService(活动)”,然后单击“确定”。
主输出被添加到自定义操作的所有四个节点,即“安装”、“提交”、“回滚”和“卸载”。

在解决方案资源管理器中,右击 MyServiceSetup 项目并选择“生成”。
安装 Windows 服务

若要安装 MyEventLog.exe,请右击解决方案资源管理器中的安装项目,并选择“安装”。
启动和停止服务

通过执行下列操作之一打开服务控制管理器:
在 Windows 2000 Professional 中,在桌面上右击“我的电脑”,然后单击“管理”。在“计算机管理”控制台中,展开“服务和应用程序”节点。
- 或 -

在 Windows 2000 Server 中,单击“开始”,指向“程序”,单击“管理工具”,然后单击“服务”。
注意 在 Windows NT 4.0 版中,可以从控制面板中打开该对话框。
现在应该看到 MyNewService 列在窗口的“服务”区域中。

从列表中选择您的服务,右击该服务,然后单击“启动”。
右击该服务,然后单击“停止”。
验证服务的事件日志输出

打开服务器资源管理器并访问“事件日志”节点。有关更多信息,请参见在服务器资源管理器中处理事件日志。
注意 服务器资源管理器的“服务器”节点在 Visual Basic 和 Visual C# .NET 的标准版中不可用。有关更多信息,请参见 Visual Basic 标准版功能或 Visual C# 标准版的功能。
找到 MyNewLog 的列表并展开它。您应该看到服务所执行操作的项。
卸载服务

在“开始”菜单上,打开“控制面板”并单击“添加或删除程序”,然后找到您的服务并单击“删除”。
还可以通过右击 .msi 文件的程序图标并选择“卸载”来卸载该程序。
注意 如果是在 Windows 2000 上安装了服务,则必须重新启动系统后才能重新安装服务。在 Windows 2000 中,服务在系统重新启动之前不会完全删除。