如何确保单实例应用程序(在多个虚拟桌面上)?
How to ensure single instance application (on multiple virtual desktops)?
我正在编写一个 C# WinForms 应用程序,我需要确保在任何给定时间都有一个实例 运行。我以为我已经使用互斥锁工作了。
这是我发现的 link:
How to restrict the application to just one instance。
这在我使用单个桌面时效果很好。但是,当在 Windows10 中打开多个虚拟桌面时,每个桌面都可以承载应用程序的另一个实例。
有没有办法在所有桌面上限制单个实例?
如果您查看 Remarks section of the docs(请参阅 Note
块)- 您可以看到,您所要做的就是在互斥量前加上 "Global\"
。这是 WinForms 的示例:
// file: Program.cs
[STAThread]
private static void Main()
{
using (var applicationMutex = new Mutex(initiallyOwned: false, name: @"Global\MyGlobalMutex"))
{
try
{
// check for existing mutex
if (!applicationMutex.WaitOne(0, exitContext: false))
{
MessageBox.Show("This application is already running!", "Already running",
MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
}
// catch abandoned mutex (previos process exit unexpectedly / crashed)
catch (AbandonedMutexException exception) { /* TODO: Handle it! There was a disaster */ }
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm());
}
}
我正在编写一个 C# WinForms 应用程序,我需要确保在任何给定时间都有一个实例 运行。我以为我已经使用互斥锁工作了。
这是我发现的 link: How to restrict the application to just one instance。
这在我使用单个桌面时效果很好。但是,当在 Windows10 中打开多个虚拟桌面时,每个桌面都可以承载应用程序的另一个实例。
有没有办法在所有桌面上限制单个实例?
如果您查看 Remarks section of the docs(请参阅 Note
块)- 您可以看到,您所要做的就是在互斥量前加上 "Global\"
。这是 WinForms 的示例:
// file: Program.cs
[STAThread]
private static void Main()
{
using (var applicationMutex = new Mutex(initiallyOwned: false, name: @"Global\MyGlobalMutex"))
{
try
{
// check for existing mutex
if (!applicationMutex.WaitOne(0, exitContext: false))
{
MessageBox.Show("This application is already running!", "Already running",
MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
}
// catch abandoned mutex (previos process exit unexpectedly / crashed)
catch (AbandonedMutexException exception) { /* TODO: Handle it! There was a disaster */ }
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm());
}
}