为防止用户运行我的应用程序的多个实例,我使用此代码: -
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#。 谢谢!
答案 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)
这些问题看起来非常相似......
https://stackoverflow.com/questions/93989/prevent-multiple-instances-of-a-given-app-in-net
答案 2 :(得分:1)
我打赌你可以使用Process.GetCurrentProcess()(就像杀死进程一样)来获取实际名称并将其用于比较。