我一直遇到进程问题,我从来没有能够检查进程是否因为某些原因而运行,我已经尝试过我可以通过谷歌找到的每一段代码,但没有任何效果。我也试过不同的文件。所以最后我会请求帮助:)这是许多未能检测到甚至notepad.exe的片段:
public bool IsProcessOpen(string name) {
foreach (Process clsProcess in Process.GetProcesses()){
if (clsProcess.ProcessName.Contains(name)){
return true;
}
}
return false;
}
我知道如何显然调用该方法,但与所有其他方法一样,它对于运行与否的任何文件都返回false。它是某种虫子吗?
答案 0 :(得分:3)
您找不到notepad.exe
,因为其ProcessName
只是notepad
。
您可以使用以下方式修剪扩展程序:
Path.GetFileNameWithoutExtension(name)
此外,您可以将方法主体缩减为一行:
return Process.GetProcessesByName(Path.GetFileNameWithoutExtension(name)).Length > 0;
答案 1 :(得分:1)
你的方法很好。也许你有大小写的问题?您可以通过在if语句中映射到大写来改进检查:
clsProcess.ProcessName.ToUpperInvariant().Contains(name.ToUpperInvariant())
然后notepad
,Notepad
和NOTEPAD
都将与名为notepad
的流程相匹配。
答案 2 :(得分:1)
这一直对我有用
if(Process.GetProcessesByName("notepad").Length == 0)
{
// do stuff
}
答案 3 :(得分:1)
它不适用于停止的工作过程。
答案 4 :(得分:0)
检查进程是否正在运行并更改按钮的颜色。 确保你的名字是正确的:有些是点exe,有些则没有。这是检查系统进程'。
Process[] proc = Process.GetProcessesByName("iexplore");
if (proc.Length == 0)
{
btnlogon.BackColor = Color.OrangeRed;
}
else
{
btnlogon.BackColor = Color.LightGreen;
}