C#判断当前启动程序进程是否存在
2012-08-08 10:18
791 查看
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);
}
}
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#读取进程列表判断程序是否已经启动(转)
- 判断当前进程是否以管理员权限启动的
- iOS - 判断程序是否是第一次启动 & 进程延迟
- 判断指定的进程或程序是否存在方法
- C#判断进程是否存在并结束进程
- iOS - 判断程序是否是第一次启动 & 进程延迟
- linux 判断某个进程是否存在,存在则重启,不存在则启动。
- C#判断进程是否存在并结束进程
- C# 判断当前目录是否存在不存在则创建
- vs.net c# 安装、注册windows service服务,判断服务是否存在,是否启动
- 判断指定的进程或程序是否存在方法
- 判断当前进程是否以管理员程序运行的方法
- 判断指定的进程或程序是否存在方法
- vs.net c# 安装、注册windows service服务,判断服务是否存在,是否启动
- Android 判断当前手机中是否存在某一个action可以启动。
- vs.net c# 安装、注册windows service服务,判断服务是否存在,是否启动
- Python3判断shell下进程是否存在&&启动&&邮件通知