2 回答

TA貢獻(xiàn)1852條經(jīng)驗(yàn) 獲得超1個(gè)贊
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("當(dāng)前程序已啟動(dòng)");
this.Dispose();
}
}
測(cè)試通過(guò)(調(diào)試模式下測(cè)試無(wú)效), 用的.NET 3.5 才行

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超3個(gè)贊
C# 創(chuàng)建互斥進(jìn)程(程序) 互斥進(jìn)程(程序), 簡(jiǎn)單點(diǎn)說(shuō),就是在系統(tǒng)中只能有該程序的一個(gè)實(shí)例運(yùn)行. 現(xiàn)在很多軟件都有這功能,如Maxthon 可以設(shè)置為"只允許打開一個(gè)窗體",還有Bitcomet等. 我也是看到這些軟件的這個(gè)功能才來(lái)研究這個(gè)問(wèn)題的. 要實(shí)現(xiàn)程序的互斥,通常有4中方式,下面用 C# 語(yǔ)言來(lái)實(shí)現(xiàn):
實(shí)現(xiàn)方式一: 使用線程互斥變量. 通過(guò)定義互斥變量來(lái)判斷是否已運(yùn)行實(shí)例.C#實(shí)現(xiàn)如下:
把program.cs文件里的Main()函數(shù)改為如下代碼:
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("已經(jīng)運(yùn)行了一個(gè)實(shí)例了。");
}
}
正在運(yùn)行的程序,他的EXE文件是無(wú)法刪除和移動(dòng)的,這是windows的文件保護(hù)!比如你打開一個(gè)word,然后不關(guān)掉,你再去刪除這個(gè)word是刪除不掉的。更本不需要你程序去做這個(gè)保護(hù)!
- 2 回答
- 0 關(guān)注
- 109 瀏覽
添加回答
舉報(bào)