我正在使用c#windows应用程序。
当我的应用程序启动时,我想检查中的实例 taskmanager为同一个应用程序。如果任何实例已经运行, shud杀死进程并启动新进程。
这是为了确保只有一个应用程序实例正在运行。
答案 0 :(得分:1)
对我而言,听起来非常具有攻击性,可能不是最好的主意。
答案 1 :(得分:1)
这是一种快速而又脏的方法,可确保只运行一个程序实例。秘诀是使用Mutex。
[STAThread]
static void Main()
{
bool ok;
m = new System.Threading.Mutex(true, "YourNameHere", out ok);
if (!ok)
{
MessageBox.Show("Another instance is already running.");
return;
}
// Do some stuff here...
GC.KeepAlive(m);
}
此代码尝试创建具有特定名称的Mutex(互斥),如果无法创建它,则该程序的实例必须已在运行。
答案 2 :(得分:0)
public Process[] ExistingProcesses()
{
string processName = Process.GetCurrentProcess().ProcessName;
Process[] processes = Process.GetProcessesByName(processName);
return processes;
}
答案 3 :(得分:0)
检索现有实例的传统方法是使用命名句柄(例如互斥锁),而不是依赖于可能通过重命名可执行文件而意外失败的进程名称。在启动期间,检查它是否已经存在,如果存在则立即关闭。
修改的
我刚刚再次阅读了这个问题,听起来你真的想要杀死之前的实例,而不是杀掉新的实例。我记得最接近这种行为的是谷歌浏览器在你打开一个新窗口时所做的事情,旧的窗口没有响应,但即便检查缺少响应,然后提示用户。杀死旧过程听起来有点极端。你确定那是你想做的吗?