C#将windows控制台程序配置为windows服务运行

时间:2024-05-22 21:19:59

一、项目背景

在平常的开发过程中,时常会遇到windows控制台应用程序在桌面运行或者隐藏运行后,被其他人员关掉。导致应用程序无法继续进行的尴尬,最终导致数据丢失。那么,将windows控制台程序配置为可在windows服务中运行,就显得科学很多。这样不会被无关因素导致关闭。windows服务我们也可以配置,实时检查,如果关闭就自动重启。

二、windows控制台程序配置为windows服务运行

1、在控制台应用程序中增加Windows服务。右键项目-》新建项-》Windows服务,点击添加即可在项目中新增Service1.cs的文件。

C#将windows控制台程序配置为windows服务运行

2、配置Windows服务代码。

双击添加的Service1.cs文件,这里我将Service1.cs重命名为了MQTTDataSync.cs,下同。

C#将windows控制台程序配置为windows服务运行

 在空白处右键-》查看代码,打开代码查看器,windows服务自动生成了OnStart和OnStop两个方法,分别为服务开启和结束时运行。我们需要将我们的业务代码方法放在两个方法中调用即可。另外我们可以在初始化组件的下方,增加我们服务的命名,代码如下:

C#将windows控制台程序配置为windows服务运行

 3、添加windows安装程序。

双击打开服务【设计】,在空白处右键-》添加安装程序,系统会自动生成安装程序,我们只需要对安装程序进行属性配置:

C#将windows控制台程序配置为windows服务运行

 首先鼠标左键点击serviceProcessInstaller1,查看右下角的属性,并进行编辑,此处需要将Account更改为LocalSystem。另外用户可以自定义Name:

C#将windows控制台程序配置为windows服务运行

 然后鼠标左键点击serviceInstaller1,查看右下角的属性,并进行编辑,用户可以编辑服务的名称ServiceName、显示名称DisplayName、描述Description等属性。

C#将windows控制台程序配置为windows服务运行

 4、安装器配置完成之后,我们就完成了windows服务的配置。但是我们都知道控制台应用程序是从Program.cs开始运行的。如何让主程序执行程序变成windows服务执行程序呢。我们需要对Program.cs进行如下更改:

   class Program
   {
        static void Main(string[] args)
        {
            ServiceBase[] ServicesToRun;
            ServicesToRun = new ServiceBase[] 
			{ 
				new MQTTDataSync() //此处是我们的windows服务类名称
			};
            ServiceBase.Run(ServicesToRun);
        }
    }

我们前面已经在windows服务的OnStart方法中增加了我们的业务方法,所以在windows服务运行时,可以直接进入我们的业务逻辑。

5、发布安装。

我们将整个项目编译为Release之后,在bin目录中找到Release文件夹,就可以对windows服务进行安装了。为了避免命令行的麻烦。我们添加两个bat文件在Release文件夹下,setup.bat和unsetup.bat。

setup.bat包含以下内容:

installutil MQTT.exe//这里的exe名称为项目生成的exe名称

unsetup.bat包含以下内容:

installutil MQTT.exe /u//这里的exe名称为项目生成的exe名称

 最后我们将整个Release文件夹复制到项目主机上,并双击文件夹中的setup.bat安装服务,我们的服务就会出现在服务列表中。这个时候我们需要对服务点击开始运行,才会运行服务。

C#将windows控制台程序配置为windows服务运行