zoukankan      html  css  js  c++  java
  • 用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

    如何删除Windows服务

    删除的办法有两个:

    办法一: 用sc.exe这个Windows命令
            开始——运行——cmd.exe,然后输入sc就可以看到了。使用办法很简单:
            sc delete "服务名"  (如果服务名中间有空格,就需要前后加引号)
            如针对上面的: sc delete KSD2Service

    方法二:直接进行注册表编辑(不推荐)
          打开注册表编辑器,找到下面的键值:
          HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services  一般服务会以相同的名字在这里显示一个主健,直接删除相关的键值便可。

    三、特殊情况

         1、如果服务显示的是rundll32.exe,并且这个文件是位于system32目录下,那么就不能删除这个rundll32.exe文件,它是Windows系统的文件。这时只要清除相关的服务就可以了

          2、如果一个服务删除了马上又自动建立了,说明后台有进程在监视、保护。需要先在进程管理器中杀掉相应的进程,或者启动后按F8,到安全模式下删除。 

  • 相关阅读:
    vim复制
    嵌入式Linux学习(二)
    (Java实现) 洛谷 P1042 乒乓球
    (Java实现) 洛谷 P1042 乒乓球
    (Java实现) 洛谷 P1071 潜伏者
    (Java实现) 洛谷 P1071 潜伏者
    (Java实现) 洛谷 P1025 数的划分
    (Java实现)洛谷 P1093 奖学金
    (Java实现)洛谷 P1093 奖学金
    Java实现 洛谷 P1064 金明的预算方案
  • 原文地址:https://www.cnblogs.com/pengyou8696/p/1901358.html
Copyright © 2011-2022 走看看