C#判断当前启动程序进程是否存在
2013-06-17 16:00
771 查看
原文:
http://blog.csdn.net/haylhf/article/details/7842087
System.Threading.Mutex mutex;//注意,此变量要定义为成员变量,而不是局部变量
bool CheckMultiInstance()
{
bool createdNew = true;
mutex = new System.Threading.Mutex(true, "_TEST_Mutex_", out createdNew);//这种在系统多用户下,每个用户能启动一个程序进程。
mutex = new System.Threading.Mutex(true, "Global\\_TEST_Mutex_", out createdNew);//这种在系统中,不管几个用户,只能存在一个这样的程序进程
if (!createdNew)
{
MessageBox.Show("Program is already running.");
}
return createdNew;
}
/// <summary>
/// Is exist same process
/// </summary>
/// <returns></returns>
public static Process GetExistProcess()
{
try
{
var current = Process.GetCurrentProcess();
var pArrayy = System.Diagnostics.Process.GetProcessesByName(current.ProcessName);
if (pArrayy == null || pArrayy.Length == 0)
{
return null;
}
foreach (var item in pArrayy)
{
try
{
/**** 这种判断方法,有BUG,当第一次以管理员启动,第二次不以管理员启动时,将会有访问被拒绝的异常抛出
if (!item.ProcessName.ToUpper().Contains(current.ProcessNameToUpper()))
{
continue;
}
if (item.Id != current.Id && item.MainModule.ModuleName.ToUpper() == current.MainModule.ModuleName.ToUpper())
{
return item;
}
**** */
///改成一下方法可解决权限问题
if(item.MainWindowHandle!=Intptr.Zero)///此时已存在的进程主窗口句柄是有值的,而第二次的APP虽然起来了,但是窗口还没有Show出来,是没有主窗口句柄的
{
return item;
}
}
catch (Exception er)
{
LogHelper.WriteException(er);
continue;
}
}
}
catch (Exception ex)
{
LogHelper.WriteException(ex);
}
return null;
}
补充以管理员权限启动:
privatevoidToShowExeAsAdmin()
{
try
{
stringstartPath="test.exe";
if (File.Exists(startPath))
{
ProcessStartInfostartInfo=newProcessStartInfo();
startInfo.FileName=startPath;
startInfo.UseShellExecute=true;
startInfo.Verb="runas";//
用admin权限启动新进程
System.Diagnostics.Process.Start(startInfo);//use
admin
}
}
catch (Exceptionex)
{
LogHelper.WriteException(ex);
}
}
http://blog.csdn.net/haylhf/article/details/7842087
System.Threading.Mutex mutex;//注意,此变量要定义为成员变量,而不是局部变量
bool CheckMultiInstance()
{
bool createdNew = true;
mutex = new System.Threading.Mutex(true, "_TEST_Mutex_", out createdNew);//这种在系统多用户下,每个用户能启动一个程序进程。
mutex = new System.Threading.Mutex(true, "Global\\_TEST_Mutex_", out createdNew);//这种在系统中,不管几个用户,只能存在一个这样的程序进程
if (!createdNew)
{
MessageBox.Show("Program is already running.");
}
return createdNew;
}
/// <summary>
/// Is exist same process
/// </summary>
/// <returns></returns>
public static Process GetExistProcess()
{
try
{
var current = Process.GetCurrentProcess();
var pArrayy = System.Diagnostics.Process.GetProcessesByName(current.ProcessName);
if (pArrayy == null || pArrayy.Length == 0)
{
return null;
}
foreach (var item in pArrayy)
{
try
{
/**** 这种判断方法,有BUG,当第一次以管理员启动,第二次不以管理员启动时,将会有访问被拒绝的异常抛出
if (!item.ProcessName.ToUpper().Contains(current.ProcessNameToUpper()))
{
continue;
}
if (item.Id != current.Id && item.MainModule.ModuleName.ToUpper() == current.MainModule.ModuleName.ToUpper())
{
return item;
}
**** */
///改成一下方法可解决权限问题
if(item.MainWindowHandle!=Intptr.Zero)///此时已存在的进程主窗口句柄是有值的,而第二次的APP虽然起来了,但是窗口还没有Show出来,是没有主窗口句柄的
{
return item;
}
}
catch (Exception er)
{
LogHelper.WriteException(er);
continue;
}
}
}
catch (Exception ex)
{
LogHelper.WriteException(ex);
}
return null;
}
补充以管理员权限启动:
privatevoidToShowExeAsAdmin()
{
try
{
stringstartPath="test.exe";
if (File.Exists(startPath))
{
ProcessStartInfostartInfo=newProcessStartInfo();
startInfo.FileName=startPath;
startInfo.UseShellExecute=true;
startInfo.Verb="runas";//
用admin权限启动新进程
System.Diagnostics.Process.Start(startInfo);//use
admin
}
}
catch (Exceptionex)
{
LogHelper.WriteException(ex);
}
}
相关文章推荐
- C#判断当前启动程序进程是否存在
- c# WinFo判断当前程序是否已经启动或存在的几种方式
- c#读取进程列表判断程序是否已经启动(转)
- c#读取进程列表判断程序是否已经启动(转)
- C#.NET Form设置/取消开机自动运行,判断程序是否已经设置成开机自动启动(转载)
- C语言判断当前某一个进程是否存在
- 判断指定的进程或程序是否存在方法
- C#判断当前程序是否通过管理员运行的方法
- C#:判断当前程序是否通过管理员运行
- C#:判断当前程序是否通过管理员运行
- Windows下C++判断当前程序是否已存在活动实例
- Linux判断进程是否存在并启动该进程
- 判断指定的进程或程序是否存在方法小结(vc等)
- C#.NET Form设置/取消开机自动运行,判断程序是否已经设置成开机自动启动
- Linux判断进程是否存在并启动该进程
- 判断指定的进程或程序是否存在方法小结(vc等)
- C#windows service服务安装、注册、判断服务是否存在、是否启动
- C#windows service服务安装、注册、判断服务是否存在、是否启动
- 判断当前进程是否以管理员权限启动的
- C#判断程序自己是否已启动