c# – 正確的.NET方式實現單個例項應用程式
我在StackOverflow中看到至少有三種不同的方法來實現這一點.
>使用MUTEX:ofollow,noindex" target="_blank">Accepted answer to this SO question
>使用Microsoft.VisualBasic庫的WindowsFormsApplicationBase:Second highest voted answer to this SO question
>使用Process.GetProcessNames檢查您的應用程式是否正在執行:Method here 已釋出為此SO question 的答案
我相信有更多的方法來做到這一點.
我只是想知道如果其中一個是首選的,如果我選擇“錯誤”的話,後果可能如何.
當有疑問時,總是喜歡.NET框架中包含的一個實現.您可以很高的期望,這樣的實施被成千上萬的程式設計師測試,已經仔細檢查了安全性和可用性,並將在未來幾年內保持下去.
互斥法是一個容易的方法.然而它卻遭受了嚴重的安全問題.拒絕服務攻擊非常簡單,您不能將互斥體的名稱保密,任何人都可以輕鬆建立具有相同名稱的互斥體,並阻止您的程式啟動.
同樣的原因,流程名稱的方法是有缺陷的.不能保證流程名稱是唯一的.不僅容易開發,而且容易被事故觸發.
WindowsFormsApplicationBase在C#程式設計師的眼中有一個影象問題.他們窒息名稱空間名稱,並假定他們的程式將以某種方式被vb-isms感染.這是廢話,它只是一個可以在任何語言中使用的簡單的.NET類.
http://stackoverflow.com/questions/14104988/correct-net-way-to-implement-a-single-instance-application