我想创建一个行为如下的控制台应用程序:
有一种简单的方法吗?
编辑: 第二个实例也终止了第一个实例及其自身。
编辑2:
更多细节方案如下:
假设我的应用程序没有运行的实例。 如果我执行我的应用程序,新实例将运行。 该应用程序将创建一个执行Adobe Acrobat Reader X的过程(例如)。
稍后,我再次执行我的应用程序只是为了杀死正在运行的Adobe Acrobat Reader X,当然还有它的主机(我的应用程序的第一个实例)。
答案 0 :(得分:3)
您需要实现互斥锁才能执行此操作。
private static Mutex mutex = null;
private void CheckIfRunning() {
string strId = "291B62B2-812A-4a13-A657-BA672DD0C93B";
bool bCreated;
try
{
mutex = new Mutex(false, strId, out bCreated);
}
catch (Exception)
{
bCreated = false;
//Todo: Kill your process
}
if (!bCreated)
{
MessageBox.Show(Resources.lbliLinkAlreadyOpen, Resources.lblError, MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
}
答案 1 :(得分:1)
您可以使用已知名称创建流程。然后,当应用程序启动时,您可以获得包含正在运行的所有进程的列表。如果没有进程,你可以启动它,如果它已经存在,你可以终止进程并退出。
更优雅的解决方案是Max建议使用Mutex在进程之间进行通信。例如,确保不要使用相同名称杀死另一个进程。