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

一、项目背景

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

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

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

2、配置Windows服务代码。

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

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

 3、添加windows安装程序。

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

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

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

 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安装服务,我们的服务就会出现在服务列表中。这个时候我们需要对服务点击开始运行,才会运行服务。

 

  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 20
    评论
当在C#Windows服务中使用ManagementEventWatcher时,可能会遇到"被拒绝访问"的问题。这通常是由于服务没有足够的权限来访问WMI资源导致的。以下是一些解决该问题的方法: 1. 确保Windows服务以管理员权限运行:将Windows服务配置为使用管理员权限运行可以解决访问被拒绝的问题。可以在服务的属性中设置该选项。 2. 授予服务所需的权限:可以通过以下步骤为服务授予所需的权限: - 打开计算机管理控制台,导航到"服务和应用程序" -> "服务"。 - 找到你的服务,并右键点击选择"属性"。 - 在"登录"选项卡中,选择一个具有足够权限的用户账户,并输入该账户的密码。 - 重新启动服务并检查是否解决了访问被拒绝的问题。 3. 设置DCOM 权限:如果你的服务需要访问远程计算机上的WMI资源,你还需要确保DCOM(分布式组件对象模型)的权限设置正确。可以按照以下步骤进行设置: - 打开组件服务控制台,导航到"组件服务" -> "计算机" -> "我的电脑" -> "属性"。 - 在"COM 安全"选项卡中,找到"启动和激活权限",点击"编辑"。 - 确保你的服务账户(或者服务所在的用户组)具有"本地启动"和"本地激活"的权限。 - 重启计算机以应用更改。 通过上述方法,你应该能够解决使用ManagementEventWatcher时遇到的"被拒绝访问"问题。记得在进行权限设置时谨慎操作,并确保服务以管理员权限运行,以便获得所需的访问权限。
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值