[問題] Mutex在Release Build失效

看板C_Sharp作者 (NUE BLA)時間14年前 (2009/12/30 16:35), 編輯推噓8(8010)
留言18則, 3人參與, 最新討論串1/1
請教高手: 以下代碼在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

12/30 19:05, , 1F
mutex不是這樣用吧....QQ
12/30 19:05, 1F

12/30 19:05, , 2F
要檢查是否重復開啟程式,請用 Process.GetCurrentProcess
12/30 19:05, 2F

12/30 21:55, , 3F
其實用named mutex的確也能偵測是否重複開啟~
12/30 21:55, 3F

12/30 21:59, , 4F
GetCurrentProcess怎麼偵測重複開啟? 不是得到目前proc?
12/30 21:59, 4F

12/30 22:08, , 5F
我也想知道 GetCurrentProcess() 的解法@@
12/30 22:08, 5F

12/30 22:13, , 6F
不過我剛剛測試~ 不會有原PO你的問題~ 這作法應該蠻單純
12/30 22:13, 6F

12/30 22:38, , 7F
我直覺認為的...那我又學到mutex這招了..科科
12/30 22:38, 7F

12/30 22:42, , 8F
我的原來想法是先取得目前的process,
12/30 22:42, 8F

12/30 22:45, , 9F
再用 GetProcessesByName()來檢查是否有重復的
12/30 22:45, 9F

12/30 22:58, , 10F
然後接下來要關掉哪個? 因為可能有兩個一起執行 結果都
12/30 22:58, 10F

12/30 22:58, , 11F
發現有多個instance,這時候就難保證先後...所以用mutex
12/30 22:58, 11F

12/30 23:11, , 12F
cplusplus 有試過使用 release build 嘛@@?我跟原PO
12/30 23:11, 12F

12/30 23:11, , 13F
一樣,在 debug build 下有效,release build 下無效…
12/30 23:11, 13F

12/31 04:45, , 14F
我有用release捏 @@...
12/31 04:45, 14F

12/31 05:00, , 15F
該不會是bug吧 XD 你們的.NET版本?
12/31 05:00, 15F

12/31 05:01, , 16F
不然就用傳統的方式吧 WaitOne(0,false)看結果
12/31 05:01, 16F

01/02 00:06, , 17F
OS 有裝 3.5 但是專案 target Framework 是 2.0
01/02 00:06, 17F

01/02 00:07, , 18F
晚點來把 target Framework 換成 3.5 或 4.0 看看好了…
01/02 00:07, 18F
文章代碼(AID): #1BEn3VEy (C_Sharp)