9 个解决方案
#1
你是想问什么???
#2
UP
#3
与一楼有同样的疑惑……
#4
编写一个程序,该程序只能启动一个实例。在运行第二个实例的时候,会打印一句话:该进程已经启动了一个实例,然后退出运行。
基本思路是这样的:利用System.Diagnostics.Process类的静态函数,获取当前正在运行的所有进程的信息。若发现与本程序具有相同特征的进程超过1个,就打印出错信息,并结束当前进程。
最好是利用程序集的attribute存放特定信息,然后用Assembly类对象的GetCustomAttributes()获取该信息进行判断。
基本思路是这样的:利用System.Diagnostics.Process类的静态函数,获取当前正在运行的所有进程的信息。若发现与本程序具有相同特征的进程超过1个,就打印出错信息,并结束当前进程。
最好是利用程序集的attribute存放特定信息,然后用Assembly类对象的GetCustomAttributes()获取该信息进行判断。
#5
利用Mutex类...和一个BOOL值就可以了
#6
private static Mutex m_MutexObject;
private static string m_MutexName = "XXXXX";
[STAThread]
static void Main()
{
try
{
m_MutexObject = new Mutex(false, m_MutexName);
}
catch(ApplicationException)
{
}
if (!m_MutexObject.WaitOne(0, false))
{
CommFucs.ShowErrMessage("该进程已经启动了一个实例");
m_MutexObject.Close();
return;
}
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new XXX());
}
#7
来晚了...学习...
#8
辛苦了,
可是,要求 利用System.Diagnostics.Process类的静态函数
和Assembly类对象的GetCustomAttributes()
可是,要求 利用System.Diagnostics.Process类的静态函数
和Assembly类对象的GetCustomAttributes()
#9
Process[] processes=Process.GetProcesses();
for(int i=0;i<processes.Length;i++)
{
//获得应用程序的主模块,其实就可以认为是你的程序
ProcessModule pm= p[i].MainModule;
//XXXX就是AssemblyInfo.cs文件中[assembly: AssemblyTitle("title")]里面的title
if(pm.FileVersionInfo.FileDescription==“XXXX”)
{
MessageBox.Show("程序已经运行。");
return;
}
}
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new FrmMain());
for(int i=0;i<processes.Length;i++)
{
//获得应用程序的主模块,其实就可以认为是你的程序
ProcessModule pm= p[i].MainModule;
//XXXX就是AssemblyInfo.cs文件中[assembly: AssemblyTitle("title")]里面的title
if(pm.FileVersionInfo.FileDescription==“XXXX”)
{
MessageBox.Show("程序已经运行。");
return;
}
}
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new FrmMain());
#1
你是想问什么???
#2
UP
#3
与一楼有同样的疑惑……
#4
编写一个程序,该程序只能启动一个实例。在运行第二个实例的时候,会打印一句话:该进程已经启动了一个实例,然后退出运行。
基本思路是这样的:利用System.Diagnostics.Process类的静态函数,获取当前正在运行的所有进程的信息。若发现与本程序具有相同特征的进程超过1个,就打印出错信息,并结束当前进程。
最好是利用程序集的attribute存放特定信息,然后用Assembly类对象的GetCustomAttributes()获取该信息进行判断。
基本思路是这样的:利用System.Diagnostics.Process类的静态函数,获取当前正在运行的所有进程的信息。若发现与本程序具有相同特征的进程超过1个,就打印出错信息,并结束当前进程。
最好是利用程序集的attribute存放特定信息,然后用Assembly类对象的GetCustomAttributes()获取该信息进行判断。
#5
利用Mutex类...和一个BOOL值就可以了
#6
private static Mutex m_MutexObject;
private static string m_MutexName = "XXXXX";
[STAThread]
static void Main()
{
try
{
m_MutexObject = new Mutex(false, m_MutexName);
}
catch(ApplicationException)
{
}
if (!m_MutexObject.WaitOne(0, false))
{
CommFucs.ShowErrMessage("该进程已经启动了一个实例");
m_MutexObject.Close();
return;
}
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new XXX());
}
#7
来晚了...学习...
#8
辛苦了,
可是,要求 利用System.Diagnostics.Process类的静态函数
和Assembly类对象的GetCustomAttributes()
可是,要求 利用System.Diagnostics.Process类的静态函数
和Assembly类对象的GetCustomAttributes()
#9
Process[] processes=Process.GetProcesses();
for(int i=0;i<processes.Length;i++)
{
//获得应用程序的主模块,其实就可以认为是你的程序
ProcessModule pm= p[i].MainModule;
//XXXX就是AssemblyInfo.cs文件中[assembly: AssemblyTitle("title")]里面的title
if(pm.FileVersionInfo.FileDescription==“XXXX”)
{
MessageBox.Show("程序已经运行。");
return;
}
}
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new FrmMain());
for(int i=0;i<processes.Length;i++)
{
//获得应用程序的主模块,其实就可以认为是你的程序
ProcessModule pm= p[i].MainModule;
//XXXX就是AssemblyInfo.cs文件中[assembly: AssemblyTitle("title")]里面的title
if(pm.FileVersionInfo.FileDescription==“XXXX”)
{
MessageBox.Show("程序已经运行。");
return;
}
}
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new FrmMain());