確定自己的進程名,以避免用戶運行我的應用程序的多個實例,我使用這個代碼: -在C#
Process[] pArry = Process.GetProcesses();
int nCount = 0;
foreach (Process p in pArry)
{
string ProcessName = p.ProcessName;
ProcessName = ProcessName.ToLower();
if (ProcessName.CompareTo("myApp") == 0)
{
nCount++;
}
}
if (nCount > 1)
{
MessageBox.Show(AppAlreadyRunning,"Error",MessageBoxButtons.OK,MessageBoxIcon.Error);
Process.GetCurrentProcess().Kill();
}
但是我們知道,進程名稱的改變,如果改變的exe名稱。 因此,如果用戶將「myApp.exe」更改爲「UserApp.exe」,則此修補程序將不起作用! 有什麼出路嗎?
我在VS2010中使用C#。 謝謝!
謝謝....雖然我先搜索,但我找不到它......這個線程真的很有幫助! – Swanand 2011-04-11 06:18:47
+1使用內核模式構造(如互斥量)絕對是做到這一點的方法(儘管使用信號量的開銷略少)。很容易更改第二個實例的進程名稱,以避免依賴進程名稱的檢查。 – 2011-05-13 16:04:36