【问题标题】:Identifying own process name in C#在 C# 中识别自己的进程名称
【发布时间】:2011-04-11 05:37:54
【问题描述】:

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

 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#。 谢谢!

【问题讨论】:

    标签: c# process


    【解决方案1】:

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

    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();
               }
           }   
    

    【讨论】:

    • @Swanand Purankar:虽然这确实回答了您的问题,但您确实应该考虑使用内核模式构造来执行此操作。即使您正在检查进程名称,用户也很容易制作您的 exe 的多个副本,每个副本都具有不同的名称。在这种情况下,您的进程名称检查不会阻止用户同时运行所有 exe。
    • @AdamRalph 虽然我在一年半之后才回复,但我记得,我也使用过互斥锁......感谢您的评论! :)
    【解决方案2】:

    【讨论】:

    • 谢谢....虽然我先搜索了,但我找不到...这个帖子真的很有帮助!
    • +1 使用诸如互斥锁之类的内核模式构造绝对是做到这一点的方法(尽管使用信号量的开销会稍微少一些)。更改第二个实例的进程名称很容易避免依赖于进程名称的检查。
    【解决方案3】:

    我敢打赌,您可以使用 Process.GetCurrentProcess()(就像您杀死进程一样)来获取实际名称并使用它进行比较。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-10
      • 1970-01-01
      • 2016-06-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多