作者MLP2007 (NUE BLA)
看板C_Sharp
标题[问题] Mutex在Release Build失效
时间Wed Dec 30 16:35:41 2009
请教高手:
以下代码在Debug Build是可行的,但在Release Build下Mutex无效,
第二个instance仍然会产生是什麽原因?
static class Program
{
[STAThread]
static void Main()
{
bool flag = false;
System.Threading.Mutex mutex = new System.Threading.Mutex(true,
"My_Mutex", out flag);
if (flag)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
else
{
MessageBox.Show("Only one instance allowed to run at a time",
"Error !", MessageBoxButtons.OK, MessageBoxIcon.Warning);
System.Threading.Thread.Sleep(5000);
Environment.Exit(1);
}
}
}
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.220.36.133
1F:推 Cloud:mutex不是这样用吧....QQ 12/30 19:05
2F:→ Cloud:要检查是否重复开启程式,请用 Process.GetCurrentProcess 12/30 19:05
3F:推 cplusplus:其实用named mutex的确也能侦测是否重复开启~ 12/30 21:55
4F:推 cplusplus:GetCurrentProcess怎麽侦测重复开启? 不是得到目前proc? 12/30 21:59
5F:推 chrisQQ:我也想知道 GetCurrentProcess() 的解法@@ 12/30 22:08
6F:推 cplusplus:不过我刚刚测试~ 不会有原PO你的问题~ 这作法应该蛮单纯 12/30 22:13
7F:→ Cloud:我直觉认为的...那我又学到mutex这招了..科科 12/30 22:38
8F:→ Cloud:我的原来想法是先取得目前的process, 12/30 22:42
9F:→ Cloud:再用 GetProcessesByName()来检查是否有重复的 12/30 22:45
10F:推 cplusplus:然後接下来要关掉哪个? 因为可能有两个一起执行 结果都 12/30 22:58
11F:→ cplusplus:发现有多个instance,这时候就难保证先後...所以用mutex 12/30 22:58
12F:→ chrisQQ:cplusplus 有试过使用 release build 嘛@@?我跟原PO 12/30 23:11
13F:→ chrisQQ:一样,在 debug build 下有效,release build 下无效… 12/30 23:11
14F:推 cplusplus:我有用release捏 @@... 12/31 04:45
15F:推 cplusplus:该不会是bug吧 XD 你们的.NET版本? 12/31 05:00
16F:→ cplusplus:不然就用传统的方式吧 WaitOne(0,false)看结果 12/31 05:01
17F:→ chrisQQ:OS 有装 3.5 但是专案 target Framework 是 2.0 01/02 00:06
18F:→ chrisQQ:晚点来把 target Framework 换成 3.5 或 4.0 看看好了… 01/02 00:07