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

发布于 2024-10-31 15:16:29 字数 749 浏览 0 评论 0原文

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

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

To prevent user from running multiple instances of my application, I am using this code:-

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

But As we know, Process Name changes if change the exe name.
So If user changes "myApp.exe" to "UserApp.exe", This patch won't work!
Is there any way out?

I am using C# in VS2010.
Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

倾城月光淡如水﹏ 2024-11-07 15:16:29

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

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

This is very simple process. Calling this function returns a process class with all the information you need.

Process.GetCurrentProcess()

Here is some code for you.

       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();
           }
       }   
何止钟意 2024-11-07 15:16:29

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

I bet you could use Process.GetCurrentProcess() (as you do to kill the process) to get the actual name and use that for comparison.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文