前往
大廳
主題

同路徑的進程(process)只能存在一個實體

Yang | 2022-07-30 10:26:51 | 巴幣 0 | 人氣 215

網路上查到的資料大多是用Mutex
System.Threading.Mutex mutex = new System.Threading.Mutex(true, uniqueName, out bool createdNew)

但我在自己電腦測試並微調過幾種寫法,結果createdNew都為true,原因不明

在此紀錄檢查Process.MainModule.FileName & Process.Id的做法
(無論是利用Mutex或Process,都需要注意權限問題)

Process ps = Process.GetCurrentProcess();

foreach (Process other in Process.GetProcessesByName(ps.ProcessName))
{
    try
    {
        //同路徑的進程只能存在一個實體
        if (other.MainModule.FileName == ps.MainModule.FileName && other.Id != ps.Id)
        {
            Environment.Exit(0);
        }
    }
    catch //有高權限進程存在時,低權限取高權限的MainModule會跳錯
    {
        //有高權限進程存在時,低權限不可執行,視需求調整
        Environment.Exit(0);
    }
}

//以上紀錄的是同路徑的進程只能存在一個實體,非作業系統全域只能存在一個實體,因此只要將整個專案資料夾複製更名,就能再啟動另一個實體
送禮物贊助創作者 !
0
留言

創作回應

更多創作