C# 如何在C中停止然后启动explorer.exe?

C# 如何在C中停止然后启动explorer.exe?,c#,process,explorer,C#,Process,Explorer,所以我的电脑有很多错误。99%的情况下,它们是由explorer.exe的愚蠢行为造成的。我可以手动停止它们,但我想我可以设置一个时间表,每10分钟左右自动停止和启动一次,这样我就再也不会有任何问题了。我的代码不起作用,但我还是要说: foreach (System.Diagnostics.Process myProc in System.Diagnostics.Process.GetProcesses()) { if (myProc.ProcessNam

所以我的电脑有很多错误。99%的情况下,它们是由explorer.exe的愚蠢行为造成的。我可以手动停止它们,但我想我可以设置一个时间表,每10分钟左右自动停止和启动一次,这样我就再也不会有任何问题了。我的代码不起作用,但我还是要说:

foreach (System.Diagnostics.Process myProc in System.Diagnostics.Process.GetProcesses())
        {
            if (myProc.ProcessName == "explorer.exe")
            {
                myProc.Kill();
            }
        }

当我运行它时,绝对不会发生任何事情。VisualStudio没有给出错误,程序没有崩溃,等等。它什么也不做

进程名只是一个资源管理器

编辑: 这在我的箱子上起了作用:

foreach (System.Diagnostics.Process myProc in System.Diagnostics.Process.GetProcesses())
        {
            if (myProc.ProcessName == "explorer")
            {
                myProc.Kill();
            }
        }

进程名只是资源管理器

编辑: 这在我的箱子上起了作用:

foreach (System.Diagnostics.Process myProc in System.Diagnostics.Process.GetProcesses())
        {
            if (myProc.ProcessName == "explorer")
            {
                myProc.Kill();
            }
        }

通常,在假设您知道partucular方法/属性包含的内容之前,最好先查看它的输出

在本例中,myProc.ProcessName不包含进程的扩展名。因此,与explorer相比


此外,在对集合进行查询时修改集合通常会导致运行时错误。

通常最好先查看partucular方法/属性的输出,然后再假设您知道它包含什么

在本例中,myProc.ProcessName不包含进程的扩展名。因此,与explorer相比

此外,在对集合进行搜索时修改集合通常会导致运行时错误。

请避免使用:

编辑:正如charmander在评论中指出的那样。

请避免使用:


编辑:正如charmander在评论中指出的那样。

你也可以用Linq的方式来做

List<Process> processes = Process.GetProcesses().Where(p => p.ProcessName == "explorer").ToList();

foreach (var process in processes)
{
  process.Kill();
}

你也可以用灵巧的方法来做

List<Process> processes = Process.GetProcesses().Where(p => p.ProcessName == "explorer").ToList();

foreach (var process in processes)
{
  process.Kill();
}


确保以管理员身份运行,并使用GetProcessByName而不是当前检查。此外,我建议不要这样做。最好花时间解决问题,而不是一直重新启动explorer.exe…这是一种核心的Windows进程-看起来你可能在做一些愚蠢的事情,或者,更可能的是,对我更友好,你有病毒。你真的应该学会如何使用任何程序员用来完成工作的基本工具。首先是调试器,这样您将看到从未调用Kill。Sysinternal的AutoRuns实用程序下一步,以便您可以禁用破坏资源管理器稳定性的shell扩展。请确保您以管理员身份运行它,并使用GetProcessByName而不是当前的检查。此外,我建议不要这样做。最好花时间解决问题,而不是一直重新启动explorer.exe…这是一种核心的Windows进程-看起来你可能在做一些愚蠢的事情,或者,更可能的是,对我更友好,你有病毒。你真的应该学会如何使用任何程序员用来完成工作的基本工具。首先是调试器,这样您将看到从未调用Kill。Sysinternal的AutoRuns实用程序下一步,以便您可以禁用破坏资源管理器稳定性的shell扩展。当我只使用资源管理器时,它会在结束后立即重新启动。听起来不错,但它在运行后马上给了我这个错误,这可能会让人恼火:平等检查更安全。我可以很容易地想象,一个进程的名称中碰巧包含了单词explorer,这在这里是不必要的。@dlev我不是建议他使用.contains,我只是表明它抓住了正确的应用程序。@Stefan即使如此,当你说这对我有用时,后面还有一段代码片段,除非您另有指示,否则您是在认可该代码段。@dlev将其更新为“相等”。我在部分文章中提到,如果Windows 7以外的系统采用不同的方式,OP可以调试并查看代码停止的进程名称,然后将其更新为使用相等。当我只使用浏览器时,它会在结束后立即重新启动。听起来不错,但它在运行后马上给了我这个错误,这可能会让人恼火:平等检查更安全。我可以很容易地想象,一个进程的名称中碰巧包含了单词explorer,这在这里是不必要的。@dlev我不是建议他使用.contains,我只是表明它抓住了正确的应用程序。@Stefan即使如此,当你说这对我有用时,后面还有一段代码片段,除非您另有指示,否则您是在认可该代码段。@dlev将其更新为“相等”。我在部分文章中提到,如果Windows 7以外的系统采用不同的方式,OP可以调试并查看代码停止的进程名称,然后将其更新为使用相等。我不相信OP真的在修改集合,当然它们影响了集合中的一个对象,但集合本身并没有被修改。@StefanH:我还没有进行研究-我不知道该集合是如何维护的。如果它只是当前进程的快照
让学生列出清单,那么你就对了。如果有某种黑巫毒使列表与当前进程列表保持同步,那么foreacher就有麻烦了。我不相信OP真的在修改集合,肯定他们影响了其中的一个对象,但是收藏本身并没有被修改。@StefanH:我还没有进行研究,我不知道收藏是如何保存的。如果它只是当前进程列表的快照,那么您是正确的。如果有某种黑巫毒使列表与当前进程列表保持同步,那么foreacher就有祸了。