2 回答

TA貢獻1852條經驗 獲得超1個贊
public Form1()
{
InitializeComponent();
System.Diagnostics.Process currentprocess = System.Diagnostics.Process.GetCurrentProcess();
System.Diagnostics.Process[] myProcesses = System.Diagnostics.Process.GetProcessesByName(currentprocess.ProcessName);
int count = myProcesses.Where(n => n.MainModule.FileName == currentprocess.MainModule.FileName).Count();
if (count > 1)
{
MessageBox.Show("當前程序已啟動");
this.Dispose();
}
}
測試通過(調試模式下測試無效), 用的.NET 3.5 才行

TA貢獻1836條經驗 獲得超3個贊
C# 創建互斥進程(程序) 互斥進程(程序), 簡單點說,就是在系統中只能有該程序的一個實例運行. 現在很多軟件都有這功能,如Maxthon 可以設置為"只允許打開一個窗體",還有Bitcomet等. 我也是看到這些軟件的這個功能才來研究這個問題的. 要實現程序的互斥,通常有4中方式,下面用 C# 語言來實現:
實現方式一: 使用線程互斥變量. 通過定義互斥變量來判斷是否已運行實例.C#實現如下:
把program.cs文件里的Main()函數改為如下代碼:
static void Main()
{
bool runone;
System.Threading.Mutex run = new System.Threading.Mutex(true, "jiaao_test", out runone);
if (runone)
{
run.ReleaseMutex();
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
else
{
MessageBox.Show("已經運行了一個實例了。");
}
}
正在運行的程序,他的EXE文件是無法刪除和移動的,這是windows的文件保護!比如你打開一個word,然后不關掉,你再去刪除這個word是刪除不掉的。更本不需要你程序去做這個保護!
- 2 回答
- 0 關注
- 102 瀏覽
添加回答
舉報