[英]How can i prevent the form from opening again?
如何防止表單再次打開。我創建了我的應用程序並安裝了它,但是當我再次單擊該圖標時,應用程序再次打開,依此類推,如果我再次單擊該圖標,我該如何防止這種情況?
一段時間后,斯科特·漢塞爾曼(Scott Hanselman)做了一個很好的帖子 - 這就是鏈接
試試Mutex。 這是一篇關於這個主題的好文章:
http://odetocode.com/Blogs/scott/archive/2004/08/20/401.aspx
[STAThread]
static void Main()
{
using(Mutex mutex = new Mutex(false, "Global\\" + appGuid))
{
if(!mutex.WaitOne(0, false))
{
MessageBox.Show("Instance already running");
return;
}
Application.Run(new Form1());
}
}
您可以通過檢查當前正在運行的進程列表來執行此操作。 如果它是重復的,則殺死自己。 這將阻止多個實例。
Process[] pArry = Process.GetProcesses(); //Get Currently Running Processes
int Instance_Counter = 0; // To count No. of Instances
foreach (Process p in pArry)
{
string ProcessName = p.ProcessName;
//Match the Process Name with Current Process (i.e. Check Duplication )
//If So Kill self
if(ProcessName == Process.GetCurrentProcess().ProcessName)
{
Instance_Counter++;
}
}
if(Instance_Counter>1)
{
//Show Error and Kill Yourself
}
這不是最好的方法,而是Swanand Purankar的固定方法,如前所述:
//I set Timer's interval to "250", it's personal
//Just don't forget to enable the timer
private void timer1_Tick(object sender, EventArgs e)
{
var self = Process.GetCurrentProcess();
foreach (var proc in Process.GetProcessesByName(self.ProcessName))
{
if (proc.Id != self.Id)
{
proc.Kill();
}
}
}
但是,通過這種方式,您無法設置錯誤。 如果你想要:
private void Form1_Load(object sender, EventArgs e)
{
if (Process.GetProcessesByName(Process.GetCurrentProcess().ProcessName).Length > 1)
{
MessageBox.Show("Hey there opening multiple instances of this process is restricted!", "Error",
MessageBoxButtons.OK, MessageBoxIcon.Error);
this.Close();
}
}
用戶仍然可以通過重命名程序輕松傳遞此信息。 使用注冊表可以幫助。 但是黑客/開發者仍然可以擺脫這種情況。 通過使用過程監視器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.