在C#中识别自己的进程名称

时间:2011-04-11 05:37:54

标签: c# process

为防止用户运行我的应用程序的多个实例,我使用此代码: -

 Process[] pArry = Process.GetProcesses();
           int nCount = 0;
           foreach (Process p in pArry)
           {
               string ProcessName = p.ProcessName;
               ProcessName = ProcessName.ToLower();
               if (ProcessName.CompareTo("myApp") == 0)
               {
                   nCount++;
               }
           }   
           if (nCount > 1)
           {
               MessageBox.Show(AppAlreadyRunning,"Error",MessageBoxButtons.OK,MessageBoxIcon.Error);
               Process.GetCurrentProcess().Kill();
           }

但正如我们所知,如果更改exe名称,进程名称会更改。 因此,如果用户将“myApp.exe”更改为“UserApp.exe”,则此修补程序将无效! 有什么出路吗?

我在VS2010中使用C#。 谢谢!

3 个答案:

答案 0 :(得分:7)

这是一个非常简单的过程。调用此函数将返回一个包含所需信息的流程类。

Process.GetCurrentProcess()

以下是一些代码。

       Process[] pArry = Process.GetProcesses();
       foreach (Process p in pArry)
       {
           if (p.Id == Process.GetCurrentProcess().Id)
                continue;
           string ProcessName = p.ProcessName;
           if(ProcessName == Process.GetCurrentProcess().ProcessName)
           {
                MessageBox.Show(AppAlreadyRunning,"Error",MessageBoxButtons.OK,MessageBoxIcon.Error)
                SetForegroundWindow(p.MainWindowHandle);
                Application.Exit();
           }
       }   

答案 1 :(得分:4)

答案 2 :(得分:1)

我打赌你可以使用Process.GetCurrentProcess()(就像杀死进程一样)来获取实际名称并将其用于比较。