Heim  >  Artikel  >  Backend-Entwicklung  >  Wie erstelle ich einen Windows-Dienst in C# (Bild)?

Wie erstelle ich einen Windows-Dienst in C# (Bild)?

黄舟
黄舟Original
2017-07-17 10:40:471582Durchsuche

这篇文章主要介绍了使用C#创建Windows服务的实例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

本文介绍了使用C#创建Windows服务的实例代码,分享给大家

一、开发环境

操作系统:Windows 10 X64

开发环境:VS2015

编程语言:C#

.NET版本:.NET Framework 4.0

目标平台:X86

二、创建Windows Service

1、新建一个Windows Service,并将项目名称改为“MyWindowsService”,如下图所示:

2、在解决方案资源管理器内将Service1.cs改为MyService1.cs后并点击“查看代码”图标按钮进入代码编辑器界面,如下图所示:

3、在代码编辑器内如入以下代码,如下所示:

using System;
using System.ServiceProcess;
using System.IO;

namespace MyWindowsService
{
  public partial class MyService : ServiceBase
  {
    public MyService()
    {
      InitializeComponent();
    }

    string filePath = @"D:\MyServiceLog.txt";

    protected override void OnStart(string[] args)
    {
      using (FileStream stream = new FileStream(filePath,FileMode.Append))
      using (StreamWriter writer = new StreamWriter(stream))
      {
        writer.WriteLine($"{DateTime.Now},服务启动!");
      }
    }

    protected override void OnStop()
    {
      using (FileStream stream = new FileStream(filePath, FileMode.Append))
      using (StreamWriter writer = new StreamWriter(stream))
      {
        writer.WriteLine($"{DateTime.Now},服务停止!");
      }
    }
  }
}

4、双击项目“MyWindowsService”进入“MyService”设计界面,在空白位置右击鼠标弹出上下文菜单,选中“添加安装程序”,如下图所示:

5、此时软件会生成两个组件,分别为“serviceInstaller1”及“serviceProcessInstaller1”,如下图所示:

6、点击“serviceInstaller1”,在“属性”窗体将ServiceName改为MyService,Description改为我的服务,StartType保持为Manual,如下图所示:

7、点击“serviceProcessInstaller1”,在“属性”窗体将Account改为LocalSystem(服务属性系统级别),如下图所示:

8、鼠标右键点击项目“MyWindowsService”,在弹出的上下文菜单中选择“生成”按钮,如下图所示:

9、至此,Windows服务已经创建完毕。

三、创建安装、启动、停止、卸载服务的Windows窗体

1、在同一个解决方案里新建一个Windows Form项目,并命名为WindowsServiceClient,如下图所示:

2、将该项目设置为启动项目,并在窗体内添加四个按钮,分别为安装服务、启动服务、停止服务及卸载服务,如下图所示:

3、按下F7进入代码编辑界面,引用“System.ServiceProcess”及“System.Configuration.Install”,并输入如下代码:

using System;
using System.Collections;
using System.Windows.Forms;
using System.ServiceProcess;
using System.Configuration.Install;

namespace WindowsServiceClient
{
  public partial class Form1 : Form
  {
    public Form1()
    {
      InitializeComponent();
    }
    string serviceFilePath = $"{Application.StartupPath}\\MyWindowsService.exe";
    string serviceName = "MyService";

    //事件:安装服务
    private void button1_Click(object sender, EventArgs e)
    {
      if (this.IsServiceExisted(serviceName)) this.UninstallService(serviceName);
      this.InstallService(serviceFilePath);
    }

    //事件:启动服务
    private void button2_Click(object sender, EventArgs e)
    {
      if (this.IsServiceExisted(serviceName)) this.ServiceStart(serviceName);
    }

    //事件:停止服务
    private void button4_Click(object sender, EventArgs e)
    {
      if (this.IsServiceExisted(serviceName)) this.ServiceStop(serviceName);
    }

    //事件:卸载服务
    private void button3_Click(object sender, EventArgs e)
    {
      if (this.IsServiceExisted(serviceName))
      {
        this.ServiceStop(serviceName);
        this.UninstallService(serviceFilePath);
      }
    }

    //判断服务是否存在
    private bool IsServiceExisted(string serviceName)
    {
      ServiceController[] services = ServiceController.GetServices();
      foreach (ServiceController sc in services)
      {
        if (sc.ServiceName.ToLower() == serviceName.ToLower())
        {
          return true;
        }
      }
      return false;
    }

    //安装服务
    private void InstallService(string serviceFilePath)
    {
      using (AssemblyInstaller installer = new AssemblyInstaller())
      {
        installer.UseNewContext = true;
        installer.Path = serviceFilePath;
        IDictionary savedState = new Hashtable();
        installer.Install(savedState);
        installer.Commit(savedState);
      }
    }

    //卸载服务
    private void UninstallService(string serviceFilePath)
    {
      using (AssemblyInstaller installer = new AssemblyInstaller())
      {
        installer.UseNewContext = true;
        installer.Path = serviceFilePath;
        installer.Uninstall(null);
      }
    }
    //启动服务
    private void ServiceStart(string serviceName)
    {
      using (ServiceController control = new ServiceController(serviceName))
      {
        if (control.Status == ServiceControllerStatus.Stopped)
        {
          control.Start();
        }
      }
    }

    //停止服务
    private void ServiceStop(string serviceName)
    {
      using (ServiceController control = new ServiceController(serviceName))
      {
        if (control.Status == ServiceControllerStatus.Running)
        {
          control.Stop();
        }
      }
    }
  }
}

4、为了后续调试服务及安装卸载服务的需要,将已生成的MyWindowsService.exe引用到本Windows窗体,如下图所示:

5、由于需要安装服务,故需要使用UAC中Administrator的权限,鼠标右击项目“WindowsServiceClient”,在弹出的上下文菜单中选择“添加”->“新建项”,在弹出的选择窗体中选择“应用程序清单文件”并单击确定,如下图所示:

6、打开该文件,并将0a2559e99331edeadda394dbccffc723改为99e389e7450f91d79e1d362b550ad9cb,如下图所示:

7. Nach dem Start der IDE erscheint das folgende Formular (einige Systeme zeigen es aufgrund der UAC-Konfiguration möglicherweise nicht an), das mit Administratorrechten geöffnet werden muss:

8. Führen Sie nach dem erneuten Öffnen das WindowsServiceClient-Projekt in der IDE aus.

9. Öffnen Sie das Ausführungsformular und geben Sie Dienste ein. msc und öffnen Sie dann den Dienst, wie in der Abbildung unten gezeigt:

10 Klicken Sie im Formular auf die Schaltfläche „Dienst installieren“. MyService wird im Dienst angezeigt wie in der folgenden Abbildung gezeigt Anzeige:

11. Klicken Sie auf die Schaltfläche „Dienst ausführen“, um den Dienst zu starten und auszuführen, wie unten gezeigt:

12. Klicken Sie auf die Schaltfläche „Dienst beenden“, und der Dienst wird beendet, wie in der Abbildung unten gezeigt:

13 Klicken Sie auf die Schaltfläche „Dienst deinstallieren“, und der Dienst wird aus dem Dienst „MyService“ entfernt.

14. Die oben genannten Start- und Stoppdienste werden in D:MyServiceLog.txt geschrieben. Der Inhalt lautet wie folgt:

Quellcode-Download: MyWindowsService_jb51 .rar

Zusätzlich: So debuggen Sie den Dienst

1 Das Debuggen des Dienstes ist eigentlich sehr einfach Projekt, das debuggt werden muss, wenn Sie den gerade erstellten Dienst debuggen möchten, setzen Sie nun einen Haltepunkt im OnStop-Ereignis, wie unten gezeigt:

2. Starten Sie das „. „WindowsServiceClient“-Projekt und wählen Sie „Anhänge“ im „Debug“-Menü zum Prozess“ (der Dienst muss im Voraus installiert werden), wie unten gezeigt:

3. Suchen „MyWindowsService.exe“ und klicken Sie auf die Schaltfläche „Anhängen“, wie in der Abbildung unten gezeigt:

4. Klicken Sie auf die Schaltfläche „Dienst beenden“, das Programm wird unterbrochen an der Stelle, an der der Haltepunkt festgelegt ist, wie in der folgenden Abbildung dargestellt:

Das obige ist der detaillierte Inhalt vonWie erstelle ich einen Windows-Dienst in C# (Bild)?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn