2014-10-19 43 views
0

我的应用程序在启动时检查是否有任何其他实例正在运行,如果是,则会关闭所有其他实例。为此,我尝试使用Process.GetProcessByName(“AppName”)函数,并将AppName的所有进程存储在进程[]数组中。现在我想找到当前实例的PID,这样我可以关闭我的应用程序的所有其他实例(显然它们具有相同的名称,但具有不同的PID)。但是,即使经过大量的谷歌搜索,我仍然无法找到。另外我怎样才能找到我的应用程序的一个实例的PID,我使用从AppName.exe中调用的Process.Start(“AppName.exe”)函数创建的如何在运行时使用C#获得我的应用程序的PID#

+1

[获得在C#创建进程的PID]的可能重复(HTTP:/ /stackoverflow.com/questions/2539920/getting-a-pid-of-a-process-created-in-c-sharp) – Chris 2014-10-19 22:33:47

回答

0

OK,与我的其他解决方案的特定问题,请参阅以下

为了进程之间钩,你需要某种形式的IPC的。要使用EventWaitHandles之间的共享句柄的简单性,可以让每个程序监听取消标志。

public static EventWaitHAndle CancellationEvent = 
    new EventWaitHandle(
     false, 
     EventResetMode.AutoReset, 
     "MyAppCancel"); 
private object lockObject = new object(); 

后来......

Task.Run(() => 
{ 
    while(true) 
    { 
     CancellationEvent.WaitOne(); 
     lock(lockObject) 
      if(!thisIsCalling) // static bool to prevent this program from ending itself 
       Environment.Exit(0); 
    } 
} 

,然后调用取消像这样

lock(lockObject) 
{ 
    thisIsCalling = true; 
    CancellationEvent.Set(); 
    thisIsCalling = false; 
} 
+0

谢谢。它似乎工作正常。干杯。 :) – Sanyam 2014-10-19 23:05:40

0

为什么不直接检查您的当前处理?

var processes = Process.GetProcessByName("AppName"); 

foreach (var p in processes) 
{ 
    if (p != Process.GetCurrentProcess()) 
     p.CloseMainWindow(); 
} 
0

如果您有兴趣关闭应用程序的其他实例,为什么不做相反的事情并防止多个实例首先打开?使用的EventWaitHandle可正是如此做:

bool created; 
var eve = new System.Threading.EventWaitHandle(
    false, 
    EventResetMode.AutoReset, 
    "MyAppHandle", 
    out created); 
if(!created) 
{ 
    eve.Set(); 
    Environment.Exit(-1); // Always use an exit error code if you're expecting to call from the console! 
} 

手柄参数,在这种情况下,“MyAppHandle”,将整个系统共享,从而意味着不仅将out created paramete放在次要instaces假的,但你可以使用eve.Set()使句柄触发acorss应用程序。设置一个监听线程,当您尝试打开第二个实例时,这可以允许消息循环显示消息。

Task.Run(() => 
{ 
    while(true) 
    { 
     eve.WaitOne(); 
     // Display an error here 
    } 
} 
+0

谢谢Aravol。但我的应用程序的其他实例正在同时为其他目的而工作。所以我也需要其他实例,但是在某些时候我必须关闭它们(当它们的关联文件的工作结束时)。 – Sanyam 2014-10-19 22:45:33

+0

在这种情况下,这是无用的!然而,你看到类似的IPC,所以让我给你提供另一个答案〜 – David 2014-10-19 22:46:36

相关问题