如何在windows服务中实现互斥锁

     2023-04-13     20

关键词:

【中文标题】如何在windows服务中实现互斥锁【英文标题】:How to implement mutex in windows service 【发布时间】:2020-05-29 10:53:52 【问题描述】:

您好,我是线程主题的新手,我需要在我的 Windows 服务中添加一个 Mutex,因为每当我运行它时,它会一遍又一遍地弹出 awesome.exe,如果它关闭了则打开一个梦幻般的.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

我正在查看很多关于如何在我发现的 ***、微软文档和谷歌查询中使用互斥锁的示例,但是老实说,因为我对这个主题很陌生,所以我有点困惑如何要建立这个,有人可以帮助我如何实现这个吗?

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);
        
    

【问题讨论】:

我不清楚你到底想做什么。看起来您的服务只是在计时器上运行批处理,并且该批处理一遍又一遍地运行 .exe?互斥锁是一种用于协调多个线程而不是多个进程的工具。 抱歉,我的回复延迟了,我正在寻找一种方法来运行我的服务,该服务将运行我的 Fantastic.bat 所以它会在我关闭时打开我的 awesome.exe。就这么简单,但是我面临的问题是我是这个主题的菜鸟,我只是遵循了关于如何创建 Windows 服务的指南,这是我在帖子中发布的代码,tbh 我没有了解要在代码中剪切哪些部分以避免一遍又一遍地打开 Fantastic.bat 我知道如果我将计时器增加到 1 小时,它将再次打开蝙蝠但进程会重复 X_X 【参考方案1】:

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

Process.HasExited Property

【讨论】:

看起来这就是我要找的东西,谢谢你的建议,我会带着更新的代码回来

如何在android中实现跨进程锁?

】如何在android中实现跨进程锁?【英文标题】:Howtoimplementcrossprocesslockinandroid?【发布时间】:2014-05-2715:31:58【问题描述】:我正在编写一个库项目供多个APP使用。而且由于某种原因,我必须为不同的APP做一个功能互斥,所以我... 查看详情

oc中实现锁

 熟悉多线程开发的同学对锁肯定不陌生,但是OC中如何实现锁呢?给大家科普一下。  首先构建一个测试用的类,假想它是我们的一个共享资源,method1与method2是互斥的,代码如下:@implementationTestObj-(void)method1{NSLog(@"%@",NSStrin... 查看详情

如何在无锁并发队列中实现“Front”方法?

】如何在无锁并发队列中实现“Front”方法?【英文标题】:Howtoimplement"Front"methodinalock-freeconcurrentqueue?【发布时间】:2019-11-2523:54:18【问题描述】:我正在尝试实现一个并发无锁队列。我正在密切关注这篇论文:https://www... 查看详情

如何在 C 中实现无锁共享标志?

】如何在C中实现无锁共享标志?【英文标题】:Howtoimplementalock-freesharedflaginC?【发布时间】:2012-10-0819:45:50【问题描述】:我有一个生产者一消费者模型,我需要生产者在数据可用时设置一个标志。我怀疑我可以在没有锁定共享... 查看详情

在 windows phone 中实现谷歌游戏服务

】在windowsphone中实现谷歌游戏服务【英文标题】:implementgooglegamesservicesinwindowsphone【发布时间】:2015-02-0816:14:38【问题描述】:我在Play商店上传了一款安卓游戏。我做了一个windows8和windowsphone8版本一样的。我需要实现在android版... 查看详情

如何在 Windows 10 UWP 中实现图表控件

】如何在Windows10UWP中实现图表控件【英文标题】:howtoimplementchartcontrolinWindows10UWP【发布时间】:2015-11-2701:55:15【问题描述】:我需要实现线性图。Windows10UWP有图表控件吗?有什么建议吗?谢谢【问题讨论】:我在大约6个月前研... 查看详情

如何在springcloud分布式系统中实现分布式锁?

最近在看分布式锁的资料,看了JosialL的《RedisinAction》的分布式锁的章节。实现思路是利用springcloud结合redis实现分布式锁。注意:这篇文章有问题,请看这一篇http://blog.csdn.net/forezp/article/details/70305336一般来说,对数据进行加锁... 查看详情

如何在 Windows Store 应用程序中实现家长控制?

】如何在WindowsStore应用程序中实现家长控制?【英文标题】:HowtoimplementparentalcontrolinWindowsStoreapplication?【发布时间】:2014-12-2522:30:20【问题描述】:我正在将教育游戏移植到Windows应用商店。游戏从网站下载关卡。我不认为他们... 查看详情

如何在springcloud分布式系统中实现分布式锁?

一、简介一般来说,对数据进行加锁时,程序先通过acquire获取锁来对数据进行排他访问,然后对数据进行一些列的操作,最后需要释放锁。Redis本身用watch命令进行了加锁,这个锁是乐观锁。使用watch命令对于频繁访问的键会引... 查看详情

在 Windows 窗体中实现 gameloop [关闭]

...这个游戏的常见问题,我很抱歉,但我不知道在哪里以及如何在我的游戏中实现游戏循环。我希望游戏循环能够像这样工作:Settings();if(startClicked==true)Spawn();while(enemyKill 查看详情

在没有互斥体的 C++11 中实现共享整数计数器的最简单方法:

】在没有互斥体的C++11中实现共享整数计数器的最简单方法:【英文标题】:EasiestwaytoimplementsharedintegercounterinC++11withoutmutexes:【发布时间】:2014-03-1702:30:48【问题描述】:假设我们有以下代码来计算某事发生的次数:inti=0;voidf()//... 查看详情

如何在iphone中实现Apple推送通知服务[重复]

】如何在iphone中实现Apple推送通知服务[重复]【英文标题】:HowtoimplementApplepushnotificationserviceiniphone[duplicate]【发布时间】:2011-11-0311:23:37【问题描述】:可能重复:HowcaniimplementPushNotificationiniphone如何在iphone中实现Apple推送通知服... 查看详情

如何使用 jabber net 在 c# Windows 应用程序中实现文件传输

】如何使用jabbernet在c#Windows应用程序中实现文件传输【英文标题】:HowtoimplementFiletransferinc#Windowsappusingjabbernet【发布时间】:2019-08-0611:08:04【问题描述】:我正在使用jabbernet和ejabberd开发一个聊天应用程序。我完成了与xmpp的一对... 查看详情

在 windows 中使用互斥锁进行进程间同步(win32 或 C++)

...个线程在App1.exe中运行,第二个进程在App2.exe中运行。我如何在Windows中同步这两个线程。有人可以分享一些示例或链接。【问 查看详情

如何在此服务器中实现 Websocket 握手?

】如何在此服务器中实现Websocket握手?【英文标题】:HowdoIimplementtheWebsocketHandshakeintothisserver?【发布时间】:2015-01-2110:34:54【问题描述】:我需要在我的Python服务器中实现Websocket握手。我的python服务器使用Twisted进行事件处理。... 查看详情

多线程编程--part5.1互斥锁之公平锁-释放锁

释放公平锁1.unlock()unlock()在ReentrantLock.java中实现的,源码如下:publicvoidunlock(){sync.release(1);}说明:unlock()是解锁函数,它是通过AQS的release()函数来实现的。在这里,“1”的含义和“获取锁的函数acquire(1)的含义”一样... 查看详情

如何在 WCF Web 服务中实现策略?

】如何在WCFWeb服务中实现策略?【英文标题】:HowtoimplementPolicyinWCFwebservice?【发布时间】:2016-08-0723:00:14【问题描述】:我想创建一个与给定Web服务相同的Web服务,仅取决于服务描述语言。我设法创建了完全相同的服务,除了这... 查看详情

我应该处置互斥锁吗?

...布时间】:2011-08-1812:01:07【问题描述】:我正在开发2个Windows服务,它们有一个公共数据库,我想用系统互斥锁锁定(跨进程)。现在我想知道在try-finally块中调用WaitOne()和ReleaseMutex()是否可以,或者我是否也应该处理互斥锁(例... 查看详情