是流程运行,永远不会工作

时间:2012-10-30 09:52:16

标签: c# .net process foreach

我一直遇到进程问题,我从来没有能够检查进程是否因为某些原因而运行,我已经尝试过我可以通过谷歌找到的每一段代码,但没有任何效果。我也试过不同的文件。所以最后我会请求帮助:)这是许多未能检测到甚至notepad.exe的片段:

public bool IsProcessOpen(string name) {
    foreach (Process clsProcess in Process.GetProcesses()){
        if (clsProcess.ProcessName.Contains(name)){
            return true;
        }
    }
    return false;
}

我知道如何显然调用该方法,但与所有其他方法一样,它对于运行与否的任何文件都返回false。它是某种虫子吗?

5 个答案:

答案 0 :(得分:3)

您找不到notepad.exe,因为其ProcessName只是notepad

enter image description here

您可以使用以下方式修剪扩展程序:

Path.GetFileNameWithoutExtension(name)

此外,您可以将方法主体缩减为一行:

return Process.GetProcessesByName(Path.GetFileNameWithoutExtension(name)).Length > 0;

答案 1 :(得分:1)

你的方法很好。也许你有大小写的问题?您可以通过在if语句中映射到大写来改进检查:

clsProcess.ProcessName.ToUpperInvariant().Contains(name.ToUpperInvariant())

然后notepadNotepadNOTEPAD都将与名为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;
        }