返回顶部
首页 > 资讯 > 精选 >C#中怎么创建控制Windows服务
  • 577
分享到

C#中怎么创建控制Windows服务

2023-06-29 02:06:21 577人浏览 安东尼
摘要

今天小编给大家分享一下C#中怎么创建控制windows服务的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。需求针对一种特殊的应

今天小编给大家分享一下C#中怎么创建控制windows服务的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

需求

针对一种特殊的应用, 不需要显示GUI, 希望常驻在Windows服务当中,在必要的时候我们可以进行启动或开机启动。

这个时候我们就可以创建WindowsService 来实现。

创建WindowsService

下面演示了使用VisualStudio2019创建一个基于.netFramework的Windows服务

C#中怎么创建控制Windows服务

项目结构如下所示:

包含了一个启动项以及一个服务类

C#中怎么创建控制Windows服务

右键查看 Service1代码, 如下所示, 包含了重写OnStart方法以及OnStop方法:

     public partial class Service1 : ServiceBase    {        public Service1()        {            InitializeComponent();        }        protected override void OnStart(string[] args)        {        }        protected override void OnStop()        {        }    }

当服务被启动, 即启动OnStart方法内执行的代码, 而在ServiceBase当中, 同样提供了多种类型的方法被重写。

C#中怎么创建控制Windows服务

当我们写完了该服务的执行代码之后, 下一步我们要为其添加一个安装程序。

双击Service1.cs, 然后右键添加安装程序,如下所示:

C#中怎么创建控制Windows服务

此时, 项目结构当中新增了一个默认名:ProjectInstaller.cs类, 而对应的设计页面如下所示:

C#中怎么创建控制Windows服务

serviceProcessInstaller1:

查看该类的属性,如下所示:

C#中怎么创建控制Windows服务

说明:

Account: 默认设置为User, 当 Account 属性为时 User , Username 和 PassWord 属性用于定义用于运行服务应用程序的帐户。

Username和 Password 对允许服务在除系统帐户之外的其他帐户下运行。 例如,如果没有用户登录,则可以允许服务在重新启动时自动启动。 如果保留 Username 或 Password 为空,并且将设置 Account 为 User ,则在安装时系统将提示您输入有效的用户名和密码。

还可以指定服务在本地系统帐户下运行,或以本地或网络服务运行。 ServiceAccount有关帐户类型的详细信息,请参阅枚举:

C#中怎么创建控制Windows服务

serviceInstaller1:

查看该类的属性,如下所示:

C#中怎么创建控制Windows服务

注: 该类扩展 ServiceBase 来实现服务。 在安装服务应用程序时由安装实用工具调用该类。

说明:

  • DelayedAutoStart : 若要延迟该服务的自动启动,则为 true;否则为 false。 默认值为 false。

  • Description : 服务的说明。 默认值为空字符串("")。

  • DisplayName : 与服务关联的名称,常用于交互工具。

  • ServiceName: 要安装的服务的名称。 该值必须在安装实用工具尝试安装服务以前进行设置。

  • ServicesDependedOn : 在与该安装程序关联的服务运行以前必须运行的一组服务。

  • StartType : 表示服务的启动方式。 默认值为 Manual,指定在计算机重新启动后服务将不会自动启动。

控制WindowsService

创建完成服务之后, 接下来就是针对服务进行控制, 现在,可以使用 ServiceController 类来连接和控制现有服务的行为。

ServiceController: 表示 Windows 服务并允许连接到正在运行或者已停止的服务、对其进行操作或获取有关它的信息。

通过ServiceController,我们可以获取本机的Service服务,以及启动、暂停、延续、挂起、关闭、刷新等动作, 如下所示:

C#中怎么创建控制Windows服务

下面的示例演示如何使用 ServiceController 类来控制 Service1 服务示例。

using System;using System.ServiceProcess;using System.Diagnostics;using System.Threading;namespace ServiceControllerSample{    class Program    {        public enum SimpleServiceCustomCommands        { StopWorker = 128, RestartWorker, CheckWorker };        static void Main(string[] args)        {            ServiceController[] scServices;            scServices = ServiceController.GetServices();            foreach (ServiceController scTemp in scServices)            {                if (scTemp.ServiceName == "Service1")                {                    // Display properties for the Simple Service sample                    // from the ServiceBase example.                    ServiceController sc = new ServiceController("Simple Service");                    Console.WriteLine("Status = " + sc.Status);                    Console.WriteLine("Can Pause and Continue = " + sc.CanPauseAndContinue);                    Console.WriteLine("Can ShutDown = " + sc.CanShutdown);                    Console.WriteLine("Can Stop = " + sc.CanStop);                    if (sc.Status == ServiceControllerStatus.Stopped)                    {                        sc.Start();                        while (sc.Status == ServiceControllerStatus.Stopped)                        {                            Thread.Sleep(1000);                            sc.Refresh();                        }                    }                    // Issue custom commands to the service                    // enum SimpleServiceCustomCommands                    //    { StopWorker = 128, RestartWorker, CheckWorker };                    sc.ExecuteCommand((int)SimpleServiceCustomCommands.StopWorker);                    sc.ExecuteCommand((int)SimpleServiceCustomCommands.RestartWorker);                    sc.Pause();                    while (sc.Status != ServiceControllerStatus.Paused)                    {                        Thread.Sleep(1000);                        sc.Refresh();                    }                    Console.WriteLine("Status = " + sc.Status);                    sc.Continue();                    while (sc.Status == ServiceControllerStatus.Paused)                    {                        Thread.Sleep(1000);                        sc.Refresh();                    }                    Console.WriteLine("Status = " + sc.Status);                    sc.Stop();                    while (sc.Status != ServiceControllerStatus.Stopped)                    {                        Thread.Sleep(1000);                        sc.Refresh();                    }                    Console.WriteLine("Status = " + sc.Status);                    String[] argArray = new string[] { "ServiceController arg1", "ServiceController arg2" };                    sc.Start(argArray);                    while (sc.Status == ServiceControllerStatus.Stopped)                    {                        Thread.Sleep(1000);                        sc.Refresh();                    }                    Console.WriteLine("Status = " + sc.Status);                    // Display the event log entries for the custom commands                    // and the start arguments.                    EventLog el = new EventLog("Application");                    EventLogEntryCollection elec = el.Entries;                    foreach (EventLogEntry ele in elec)                    {                        if (ele.Source.IndexOf("Service1.OnCustomCommand") >= 0 |                            ele.Source.IndexOf("Service1.Arguments") >= 0)                            Console.WriteLine(ele.Message);                    }                }            }        }    }}//This sample displays the following output if the Simple Service//sample is running://Status = Running//Can Pause and Continue = True//Can ShutDown = True//Can Stop = True//Status = Paused//Status = Running//Status = Stopped//Status = Running//4:14:49 PM - Custom command received: 128//4:14:49 PM - Custom command received: 129//ServiceController arg1//ServiceController arg2

安装WindowsService

能够控制我们创建的服务的前提是, 该服务已安装在我们调试的设备上, 我们可以通过AssemblyInstaller 类来进行安装。

安装示例

在下面的示例中, AssemblyInstaller 通过调用 AssemblyInstaller 构造函数来创建。 设置此对象的属性,并 Install Commit 调用和方法以安装 MyAssembly.exe 程序集。

using System;using System.Configuration.Install;using System.Collections;using System.Collections.Specialized;class AssemblyInstaller_Example{   static void Main()   {      IDictionary mySavedState = new Hashtable();      Console.WriteLine( "" );      try      {         // Set the commandline argument array for 'logfile'.         string[] commandLineOptions = new string[ 1 ] {"/LogFile=example.log"};         // Create an object of the 'AssemblyInstaller' class.         AssemblyInstaller myAssemblyInstaller = new                     AssemblyInstaller( "MyAssembly.exe" , commandLineOptions );         myAssemblyInstaller.UseNewContext = true;         // Install the 'MyAssembly' assembly.         myAssemblyInstaller.Install( mySavedState );         // Commit the 'MyAssembly' assembly.         myAssemblyInstaller.Commit( mySavedState );      }      catch (Exception e)      {         Console.WriteLine( e.Message );      }   }}

卸载示例

下面的示例演示的 Uninstall 方法 Installer 。 Uninstall方法在的派生类中被重写 Installer 。

// Override 'Uninstall' method of Installer class.public override void Uninstall( IDictionary mySavedState ){   if (mySavedState == null)   {      Console.WriteLine("Uninstallation Error !");   }   else   {      base.Uninstall( mySavedState );      Console.WriteLine( "The Uninstall method of 'MyInstallerSample' has been called" );   }}

以上就是“C#中怎么创建控制Windows服务”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网精选频道。

--结束END--

本文标题: C#中怎么创建控制Windows服务

本文链接: https://lsjlt.com/news/321970.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C#中怎么创建控制Windows服务
    今天小编给大家分享一下C#中怎么创建控制Windows服务的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。需求针对一种特殊的应...
    99+
    2023-06-29
  • C#创建控制Windows服务
    需求 针对一种特殊的应用, 不需要显示GUI, 希望常驻在Windows服务当中,在必要的时候我们可以进行启动或开机启动。 这个时候我们就可以创建WindowsService 来实现...
    99+
    2024-04-02
  • C#怎么创建Windows服务程序
    本篇内容主要讲解“C#怎么创建Windows服务程序”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#怎么创建Windows服务程序”吧!C#创建Windows服务程序:在介绍如何C#创建Win...
    99+
    2023-06-18
  • C#如何创建Windows服务
    小编给大家分享一下C#如何创建Windows服务,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!C#创建Windows服务(Windows Services)Win...
    99+
    2023-06-18
  • C# 创建控制台应用程序
    目录在学习C#语言的时候,首先要学习控制台的应用程序,这样才能专注于语言的学习,减少学习的梯度,也有利于输出自己需要输出的内容。因此第一步学习C#语言时,一定要先使用控制台的应用程序...
    99+
    2024-04-02
  • Oracle中怎么重新创建控制文件
    本篇文章为大家展示了Oracle中怎么重新创建控制文件,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、创建控制文件有2种方式   &...
    99+
    2024-04-02
  • C# 中怎么创建一个复合控件
    本篇文章为大家展示了C# 中怎么创建一个复合控件,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。构建提供丰富的客户端接口的复杂Web控件经常需要把一些客户端JavaScript代码与控件的服务器端代码...
    99+
    2023-06-17
  • C#Windows服务程序中如何为Windows服务创建安装项目
    小编给大家分享一下C#Windows服务程序中如何为Windows服务创建安装项目,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!C#Windows服务程序之安装项目的由来:本文介绍如何创建Windows 服务应用程序(以前...
    99+
    2023-06-18
  • Laravel中如何创建控制器
    这篇文章给大家分享的是有关Laravel中如何创建控制器的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。为了替代在路由文件中以闭包形式定义的所有的请求处理逻辑,如果想要使用控制类来组织这些行为,控制器能将相关的请求...
    99+
    2023-06-21
  • C#中怎么创建一个Web Service服务
    本篇文章为大家展示了C#中怎么创建一个Web Service服务,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。为什么需要Web Service以前,分布式的应用程序逻辑需要使用分布式的对象模型,通过...
    99+
    2023-06-18
  • Python怎么远程控制Windows服务器
    本篇内容主要讲解“Python怎么远程控制Windows服务器”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python怎么远程控制Windows服务器”吧!在很多企业会使用闲置的 Window...
    99+
    2023-06-30
  • C#创建Windows服务与服务的安装、卸载
    Windows 服务(即,以前的 NT 服务)使您能够创建在它们自己的 Windows 会话中可长时间运行的可执行应用程序。这些服务可以在计算机启动时自动启动,可以暂停和重新启动而且...
    99+
    2024-04-02
  • VB.NET中怎么定制Windows控件
    本篇文章给大家分享的是有关VB.NET中怎么定制Windows控件,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一 .NET中设计控件.NET将控件放在UserControl对...
    99+
    2023-06-17
  • 怎么创建WCF Windows
    本篇内容主要讲解“怎么创建WCF Windows”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么创建WCF Windows”吧!WCF Windows应用程序是一种需要长期运行的应用程序,很适...
    99+
    2023-06-17
  • C#如何创建Windows服务与服务的安装、卸载
    这篇文章主要介绍C#如何创建Windows服务与服务的安装、卸载,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Windows 服务(即,以前的 NT 服务)使您能够创建在它们自己的 Windows 会话中可长时间运行...
    99+
    2023-06-29
  • C#中怎么创建String对象
    本文小编为大家详细介绍“C#中怎么创建String对象”,内容详细,步骤清晰,细节处理妥当,希望这篇“C#中怎么创建String对象”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。创建 String 对象您可以使用...
    99+
    2023-06-17
  • C#中怎么创建抽象类
    这篇文章主要介绍“C#中怎么创建抽象类”,在日常操作中,相信很多人在C#中怎么创建抽象类问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C#中怎么创建抽象类”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!动态...
    99+
    2023-06-17
  • C#中怎么创建派生类
    这篇文章主要讲解了“C#中怎么创建派生类”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#中怎么创建派生类”吧!基类和派生类一个类可以派生自多个类或接口,这意味着它可以从多个基类或接口继承数...
    99+
    2023-06-17
  • C#中怎么启动windows服务
    这篇文章给大家介绍C#中怎么启动windows服务,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。C#启动windows服务的由来:我们知道, 在C#代码中启动一个已经存在的windows服务,我们可以用这样的代码来完成...
    99+
    2023-06-18
  • python怎么控制windows窗口
    要控制Windows窗口,您可以使用`pywin32`库来与Windows API进行交互。首先,您需要安装`pywin32`库。可...
    99+
    2023-10-11
    python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作