如何在Windows服务中实现互斥

问题描述 投票:1回答:1

你好,我是线程主题的新手,我需要在Windows服务中添加一个Mutex,因为每当我运行它时,它都会在awesome.exe之上弹出,如果关闭的话,它会打开a fantastic.bat。

Fantastic.bat

@echo off
:1
"C:\awesome.exe"
goto :1

我做了一个C#项目来创建Windows服务,我跟踪了this guide,通过它进行跟踪非常简单,瞧!我得到了预期的Windows服务,但是我认为互斥体将是一种适当的方法,以避免避免一遍又一遍地打开许多进程。

MyService.cs

using System;
using System.ServiceProcess;
using System.Timers;

namespace Good_enough_service
{
    public partial class GoodService : ServiceBase
    {
        private Timer _syncTimer = null;
        public GoodService()
        {
            InitializeComponent();
        }

        protected override void OnStart(string[] args)
        {
            _syncTimer = new Timer();
            this._syncTimer.Interval = 1000;
            this._syncTimer.Elapsed +=
              new System.Timers.
                ElapsedEventHandler(this.syncTimerTicker);

            _syncTimer.Enabled = true;
        }

        protected override void OnStop()
        {

            _syncTimer.Enabled = false;
        }

        private void syncTimerTicker(object sender, EventArgs e)
        {

            System.Diagnostics.Process.Start(@"C:\fantastic.bat");
        }
    }
}

我能够安装该服务,但蝙蝠弹出了很多次,因此它打开了我的awesome.exe的很多次

我正在寻找许多如何在Stackoverflow,Microsoft docs和google查询中使用Mutex的示例,但是说实话,因为我是这个主题的新手,所以我对如何加强这一点,有人可以协助我实现这一点吗?

Program.cs

这是服务项目的一部分
using System.ServiceProcess;

namespace Good_enough_service
{
    static class Program
    {
        static void Main()
        {
            ServiceBase[] ServicesToRun;
            ServicesToRun = new ServiceBase[]
            {
                new GoodService()
            };
            ServiceBase.Run(ServicesToRun);
        }
    }
}

你好,我是线程主题的新手,我需要在Windows服务中添加一个Mutex,因为每当我运行Mutex时,它都会在awesome.exe之上弹出,如果关闭,则great.bat会打开它。太棒了...

c# windows multithreading service mutex
1个回答
1
投票

鉴于您的目标只是启动.exe并确保其继续运行,您需要做的就是使用Process对象直接启动可执行文件,然后通过HasExited属性监视其完成情况。当该进程退出时,只需启动一个新进程(或重新启动现有的进程)。

© www.soinside.com 2019 - 2024. All rights reserved.