让你的程序只能运行一个实例
生活随笔
收集整理的這篇文章主要介紹了
让你的程序只能运行一个实例
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
????先說一個(gè)循環(huán)系統(tǒng)進(jìn)程的方法吧,
????????????//首先取得你的程序當(dāng)前進(jìn)程
????????????Process current = Process.GetCurrentProcess();
????????????//用你進(jìn)程的名字到系統(tǒng)進(jìn)程中取
??????????? Process[] processes = Process.GetProcessesByName(current.ProcessName);
????????????//真的取到了多個(gè)就循環(huán)他們
????????????foreach (Process process in processes)
??????????? {
????????????????//因?yàn)榧词惯M(jìn)程名一致但是進(jìn)程ID仍然會(huì)不同,如果在你系統(tǒng)里存在兩個(gè)你的程序了
??????????????? if (process.Id != current.Id)
??????????????? {
??????????????????? if (process.MainModule.FileName
??????????????????? == current.MainModule.FileName)
??????????????????? {
????????????????????????//經(jīng)過多個(gè)判斷可以確定你程序的進(jìn)程在系統(tǒng)中已經(jīng)有存在了,那么就關(guān)掉它吧
??????????????????????? MessageBox.Show("程序已經(jīng)運(yùn)行!", Application.ProductName,
??????????????????????? MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
??????????????????????? Application.Exit();
??????????????????????? return;
??????????????????? }
??????????????? }
??????????? }??
????再說另一種使用互斥對(duì)象的方法,
???????????? //這里第2個(gè)參數(shù)是保證你程序唯一性的而一個(gè)字符串
?????????????static Mutex mutex = new Mutex(false, "f880a127-9d21-4907-aa83-6041dc0faa4a");
?????????????if (!mutex.WaitOne(1000,false)) //等待1秒, 如果有相同實(shí)例運(yùn)行則給用戶提示
??????????? {
??????????????? MessageBox.Show("程序已在運(yùn)行,如果仍有問題,請(qǐng)檢查是否已在系統(tǒng)進(jìn)程中運(yùn)行。");
??????????????? return;
??????????? }
??????????? try
??????????? {
??????????????? Application.EnableVisualStyles();
??????????????? Application.SetCompatibleTextRenderingDefault(false);
??????????????? Application.Run(new Form1());
??????????? }
??????????? finally { mutex.ReleaseMutex(); }
????總結(jié)完畢.
????????????//首先取得你的程序當(dāng)前進(jìn)程
????????????Process current = Process.GetCurrentProcess();
????????????//用你進(jìn)程的名字到系統(tǒng)進(jìn)程中取
??????????? Process[] processes = Process.GetProcessesByName(current.ProcessName);
????????????//真的取到了多個(gè)就循環(huán)他們
????????????foreach (Process process in processes)
??????????? {
????????????????//因?yàn)榧词惯M(jìn)程名一致但是進(jìn)程ID仍然會(huì)不同,如果在你系統(tǒng)里存在兩個(gè)你的程序了
??????????????? if (process.Id != current.Id)
??????????????? {
??????????????????? if (process.MainModule.FileName
??????????????????? == current.MainModule.FileName)
??????????????????? {
????????????????????????//經(jīng)過多個(gè)判斷可以確定你程序的進(jìn)程在系統(tǒng)中已經(jīng)有存在了,那么就關(guān)掉它吧
??????????????????????? MessageBox.Show("程序已經(jīng)運(yùn)行!", Application.ProductName,
??????????????????????? MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
??????????????????????? Application.Exit();
??????????????????????? return;
??????????????????? }
??????????????? }
??????????? }??
????再說另一種使用互斥對(duì)象的方法,
???????????? //這里第2個(gè)參數(shù)是保證你程序唯一性的而一個(gè)字符串
?????????????static Mutex mutex = new Mutex(false, "f880a127-9d21-4907-aa83-6041dc0faa4a");
?????????????if (!mutex.WaitOne(1000,false)) //等待1秒, 如果有相同實(shí)例運(yùn)行則給用戶提示
??????????? {
??????????????? MessageBox.Show("程序已在運(yùn)行,如果仍有問題,請(qǐng)檢查是否已在系統(tǒng)進(jìn)程中運(yùn)行。");
??????????????? return;
??????????? }
??????????? try
??????????? {
??????????????? Application.EnableVisualStyles();
??????????????? Application.SetCompatibleTextRenderingDefault(false);
??????????????? Application.Run(new Form1());
??????????? }
??????????? finally { mutex.ReleaseMutex(); }
????總結(jié)完畢.
轉(zhuǎn)載于:https://www.cnblogs.com/wzc998/archive/2008/05/31/1211287.html
總結(jié)
以上是生活随笔為你收集整理的让你的程序只能运行一个实例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Frame和Iframe横向滚动条的解决
- 下一篇: .NET平台PE结构分析之Metadat