gpt4 book ai didi

c# - 如何实现单机单实例应用?

转载 作者:可可西里 更新时间:2023-11-01 08:59:50 26 4
gpt4 key购买 nike

我必须限制我的 .net 4 WPF 应用程序,以便它在每台机器上只能运行一次。请注意,我说的是每台机器,而不是每个 session 。
到目前为止,我使用一个简单的互斥锁实现了单实例应用程序,但不幸的是,每个 session 都有一个这样的互斥锁。

有没有一种方法可以创建机器范围的互斥锁,或者是否有任何其他解决方案可以为每个机器应用程序实现一个实例?

最佳答案

我会使用必须在应用程序的生命周期内保留的全局 Mutex 对象来执行此操作。

MutexSecurity oMutexSecurity;

//Set the security object
oMutexSecurity = new MutexSecurity();
oMutexSecurity.AddAccessRule(new MutexAccessRule(new SecurityIdentifier(WellKnownSidType.BuiltinUsersSid, null), MutexRights.FullControl, AccessControlType.Allow));

//Create the global mutex and set its security
moGlobalMutex = new Mutex(True, "Global\\{5076d41c-a40a-4f4d-9eed-bf274a5bedcb}", bFirstInstance);
moGlobalMutex.SetAccessControl(oMutexSecurity);

如果这是您的应用程序在全局范围内运行的第一个实例,则返回 bFirstInstance。如果您省略了互斥锁的全局部分或将其替换为本地,则互斥锁将仅针对每个 session (这可能是您当前代码的工作方式)。

我相信我首先从 Jon Skeet 获得了这项技术.

关于 Mutex 的 MSDN 主题object 解释了 Mutex 对象的两个作用域,并强调了为什么这在使用终端服务时很重要(请参阅倒数第二个注释)。

关于c# - 如何实现单机单实例应用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4223061/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com