你好,我是线程主题的新手,我需要在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会打开它。太棒了...
鉴于您的目标只是启动.exe
并确保其继续运行,您需要做的就是使用Process
对象直接启动可执行文件,然后通过HasExited
属性监视其完成情况。当该进程退出时,只需启动一个新进程(或重新启动现有的进程)。