启动资源管理器.exe而不创建窗口 C#

本文关键字:创建 窗口 资源管理器 exe 启动 | 更新日期: 2023-09-27 18:30:38

我有一个重新启动的程序explorer.exe
这是我杀死explorer.exe的代码

Process[] process = Process.GetProcessesByName("explorer.exe");
foreach (Process theprocess in process) {
    theprocess.Kill();
}

以下代码成功工作并停止explorer.exe
这是我启动explorer.exe的代码

Process.Start("explorer");

这也可以工作,但它也会创建一个Windows资源管理器窗口以及启动explorer.exe过程。

我的问题是,如何在不创建 Windows 资源管理器窗口的情况下启动explorer.exe?立即关闭资源管理器窗口也可以被视为答案。

启动资源管理器.exe而不创建窗口 C#

我不知道如何在不打开窗口的情况下启动资源管理器,但是您可以使用SHDocVW.dll中的ShellWindows界面枚举资源管理器窗口,如下所示,然后在弹出窗口时关闭窗口:

// Kill explorer
Process[] procs = Process.GetProcessesByName("explorer");
foreach (Process p in procs)
{
    p.Kill();
}
// Revive explorer
Process.Start("explorer.exe");
// Wait for explorer window to appear
ShellWindows windows;
while ((windows = new SHDocVw.ShellWindows()).Count == 0)
{
    Thread.Sleep(50);
}
foreach (InternetExplorer p in windows)
{
    // Close explorer window
    if(Path.GetFileNameWithoutExtension(p.FullName.ToLower()) == "explorer")
        p.Quit();
}

如果资源管理器未运行,则调用资源管理器的完整路径就足够了.exe:

Process.Start(
    Path.Combine(
        Environment.GetEnvironmentVariable("windir"), "explorer.exe"
    )
);
这只会在

资源管理器已运行时打开一个窗口,否则它只会打开任务栏。

在遇到启动资源管理器时任务栏并不总是出现的问题后,我找到了更好的解决方案:

Process.Start(Path.Combine(Environment.GetEnvironmentVariable("windir"), "explorer.exe"));

如果像这样指定完整路径,它将不会创建窗口,并且仅在资源管理器尚未运行时加载任务栏。

取自这个答案。