相关疑难解决方法(0)

是否使用Mutex来防止同一程序的多个实例运行安全?

我正在使用此代码阻止我的程序的第二个实例同时运行,是否安全?

Mutex appSingleton = new System.Threading.Mutex(false, "MyAppSingleInstnceMutx");
if (appSingleton.WaitOne(0, false)) {
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.Run(new MainForm());
    appSingleton.Close();
} else {
    MessageBox.Show("Sorry, only one instance of MyApp is allowed.");
}
Run Code Online (Sandbox Code Playgroud)

我担心如果有什么东西抛出一个异常并且应用程序崩溃了Mutex仍然会被保留.真的吗?

c# mutex single-instance winforms

45
推荐指数
4
解决办法
5万
查看次数

C#mutex - 从ASP.NET和控制台应用程序调用错误

我使用全局命名的互斥锁来实现ASP.NET应用程序和控制台应用程序之间的文件访问同步.

在运行ASP.NET应用程序时,控制台应用程序无法获得互斥锁 - 正如预期的那样.在运行控制台应用程序时,ASP.NET应用程序将抛出UnauthorizedAccessException: Access to the path 'Global\TheNameOfTheMutex' is denied.

我将尝试捕获异常并将其视为未能获取互斥锁,但我想知道为什么它会像这样?如果从两个不同的浏览器访问ASP.NET应用程序,并且运行多个实例时控制台应用程序也按预期运行,则ASP.NET应用程序按预期运行.

更新:在Windows XP上,当ASP.NET应用程序运行并且我尝试启动控制台应用程序时,也会抛出异常.

用于同步的代码位于通用程序集中:

using (Mutex m = new Mutex(false, "Global\\TheNameOfTheMutex")) // exception thrown
{
  try
  {
    lock = m.WaitOne(0, false);
  }
  catch (AbandonedMutexException)
  {
    // ...
  }

  if(lock)
  {
    // ...

    m.ReleaseMutex();
  }
}
Run Code Online (Sandbox Code Playgroud)

环境:Windows Server 2008,IIS 7,ASP.NET 2.0

c# asp.net mutex

6
推荐指数
2
解决办法
9302
查看次数

标签 统计

c# ×2

mutex ×2

asp.net ×1

single-instance ×1

winforms ×1