1

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

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

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

4

5 回答 5

3

你不会找到notepad.exe,因为它ProcessName只是notepad

在此处输入图像描述

您可以使用以下方法修剪扩展:

Path.GetFileNameWithoutExtension(name)

您还可以将方法主体减少到一行:

return Process.GetProcessesByName(Path.GetFileNameWithoutExtension(name)).Length > 0;
于 2012-10-30T09:58:34.673 回答
1

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

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

然后notepad,将所有匹配的进程命名Notepad为。NOTEPADnotepad

于 2012-10-30T09:58:47.267 回答
1

它不适用于停止的工作过程。

于 2013-10-07T07:56:10.080 回答
1

这一直对我有用

if(Process.GetProcessesByName("notepad").Length == 0)
{
    // do stuff
}
于 2012-10-30T10:02:02.847 回答
0

这将检查进程是否正在运行并更改按钮的颜色。确保您的名称正确:有些使用 dot exe,有​​些则没有。这是检查系统进程'。

   Process[] proc = Process.GetProcessesByName("iexplore");
        if (proc.Length == 0)
        {
            btnlogon.BackColor = Color.OrangeRed;
        }
        else
        {
            btnlogon.BackColor = Color.LightGreen;
        }
于 2014-02-13T16:54:24.743 回答