我尝试过这样的所有流程:
List<string> processes = new List<string>();
foreach(Process process in Process.GetProcesses())
{
if(!process.HasExited)
processes.Add(process.ProcessName);
}
tasklist
)所以我的问题是:有没有一种正确的方法可以获得所有流程? (不强制程序以管理员身份运行)
我不想强迫自己这样做:
System.Diagnostics.Process.Start("CMD.exe", "tasklist > C:\file.txt");
String[] processes = File.ReadAllLines(@"C:\file.txt");
答案 0 :(得分:3)
你不能。您不能让同一进程在提升和用户模式下运行部件。这就是他们构建它的方式,主要是出于安全考虑。你不能绕过它。
足够你能做什么。你能做什么?您可以启动以提升模式运行的第二个(不同)程序,或者在有需要提升权限的部分时重新启动当前应用程序。您需要Process.Start
,因此您需要将ProcessStartInfo.Verb
设置为"runas"
:
ProcessStartInfo startInfo = new ProcessStartInfo(exePath);
startInfo.Verb = "runas";
Process.Start(startInfo);
答案 1 :(得分:0)
Process.GetProcesses()
列表中但布尔管理特权进程的HasExited始终为真! (即使它还没有关闭!)所以只需循环遍历列表而不检查process.HasExited
!
foreach(Process process in Process.GetProcesses())
{
if(!process.HasExited) //running process with user privileges
{
//do some stuff here
}
else //closed process or administrator process
{
//do some stuff here
}
}