作者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