C#编写windows服务程序方法与总结

来源:互联网 发布:好看的网络剧推荐 编辑:程序博客网 时间:2024/06/13 21:39

Microsoft Windows 服务(即,以前的 NT 服务)使您能够创建在它们自己的 Windows 会话中可长时间运行的可执行应用程序。这些服务可以在计算机启动时自动启动,可以暂停和重新启动而且不显示任何用户界面。
通过创建作为服务安装的应用程序,可以轻松地创建服务。创建并生成了应用程序后,可以通过运行命令行实用工具 InstallUtil.exe 并将路径传递给服务的可执行文件,或通过使用 Visual Studio 的部署功能来安装该应用程序。然后可以使用服务控制管理器启动、停止、暂停、继续和配置服务。这些任务中的许多种也可以在服务器资源管理器服务节点中或通过使用 ServiceController 类来完成。

下面简要说明创建服务程序的步骤:

调试环境Microsoft Visual Studio.net 2008(.net framework 2.0)

选择文件->新建->项目中的Windows 服务,工程中默认有program.csservice1.cs二个文件。在service1.cs的设计界面里点击右键菜单中的“添加安装程序”,这时候工程里会多一个projectinstaller.cs的文件,在这个工程文件里我们可以设置与服务相关的属性以及控制其启动方式等。点击projectinstall设计界面中的serviceinstaller1组件,在属性中我们可以做如下调整:

1)      Description:设置与服务有关的解释说明

2)      displayname:标识服务的友好名称

3)      servicename:设置服务的名称

4)      starttype:启动方式,如果想让服务安装完成后自动启动,可以设置成automatic

点击serviceprocessinstall1组件,在属性中我们将account设置成localsystem

这样基本上服务就设置完毕了。接下来的工作就是写对应的代码。回到service1.cs文件中,默认有onstartonstop属性,分别对应了服务启动和停止时执行的事件。

一、代码举例:服务器启动后定时进行操作。

比如我们在将当前系统的时间不间段的写在c:/test.txt文件中。这里需要自定义一个定时器,以及自定义其相关的事件来完成。代码如下:

protected override void OnStart(string[] args)

{

RunMyTimer();

             }

/// <summary>

        /// 服务器运行定时器

        /// </summary>

        private  void RunMyTimer()

        {

            myTimer.Interval = 1000;

            myTimer.Elapsed += new System.Timers.ElapsedEventHandler(MTimedEvent);

            myTimer.Enabled = true;       

        }

 

        /// <summary>

        /// 自定义定时器事件

        /// </summary>

        /// <param name="source"></param>

        /// <param name="e"></param>

        private void MTimedEvent(object source, System.Timers.ElapsedEventArgs e)

        {

            System.IO.StreamWriter sw = new System.IO.StreamWriter(@"c:/test.txt", true);

            sw.WriteLine(DateTime.Now.ToString());

            sw.Close();

        }

二、安装与卸载服务:

         当编译成功后,会在当前目录的bin/debug/下产生相应的EXE文件,由于属于服务的程序,是无法双击来执行的。我们可以通过微软提供的installutil.exe来执行安装服务。

这个文件在c:/windows/microsoft.net/framework/v2.0.0005/下面

我们执行installutil  service.exe,这样即可完成服务的安装。通过加参数/u可以卸载已安装的服务。

三、设置服务启动后自动执行:

         前面讲到了projectinstall有一个starttype属性,用于设置服务器安装后是否自动启动,实践中发现这个方法并不都有效。往往是安装完服务后还需要手工去执行启动。修改的方法如下:

projectinstaller.cs中添加如下代码:

public ProjectInstaller()

{

    InitializeComponent();

    this.Committed += new InstallEventHandler(ProjectInstaller_Committed);  

}

private void ProjectInstaller_Committed(object sender, InstallEventArgs e)

{

System.ServiceProcess.ServiceController controller = new System.ServiceProcess.ServiceController("testserivce"); //参数为服务的名字

 controller.Start();

}