如何检测我的程序是否在Windows中运行?

时间:2009-06-05 19:35:37

标签: c# windows console

我正在编写一个C#控制台应用程序。它将作为计划任务运行。

如果发现另一个进程仍在从上一个计划任务执行中运行,我希望我的EXE快速退出。

我似乎找不到让我的应用程序检测活动进程的方法,因此知道它是否已经运行。

感谢您的任何想法。 彼得

4 个答案:

答案 0 :(得分:12)

一种非常常见的技术是在进程启动时创建互斥锁。如果您无法创建互斥锁,则表示正在运行另一个实例。

这是来自Nathan's Link的样本:

//Declare a static Mutex in the main form or class...
private static Mutex _AppMutex = new Mutex(false, "MYAPP");

// Check the mutex before starting up another possible instance
[STAThread]
static void Main(string[] args) 
{
  if (MyForm._AppMutex.WaitOne(0, false))
  {
    Application.Run(new MyForm());
  }
  else
  {
    MessageBox.Show("Application Already Running");
  }
  Application.Exit();
}

答案 1 :(得分:1)

试 的System.Diagnostics.Process

getProcesses()

答案 2 :(得分:1)

使用互斥锁:

// Allow only one instance of app
// See http://www.yoda.arachsys.com/csharp/faq/#one.application.instance
bool firstInstance;
_mutex = new Mutex(false, "Local\\[UniqueName]", out firstInstance);

Link to reference in comment

答案 3 :(得分:0)

System.Diagnostics中是否有用于检查进程的内容?

编辑:这些链接中的任何一个对您有帮助吗?我可以看到它们如何有用。

对不起,我所能做的只是为您提供其他项目的链接。我从来没有使用过System.Diagnostics,但希望它可以帮助你或其他人。