如何在启动到非桌面shell后从C#代码加载/显示桌面?

时间:2016-06-01 13:32:35

标签: c# windows

我有一个应用程序,我作为shell启动,而不是启动到Windows的桌面。因此,启动后根本没有可见的桌面。有时在故障排除期间我需要访问桌面。在Windows 7中,我只运行了Process.Start(“explorer”),桌面就出现了。但是在Windows 10中,这只会打开一个资源管理器窗口,而不是桌面。但是,如果我打开任务管理器并选择文件/运行新任务并输入“资源管理器”,则会打开桌面。所以似乎有可能。但是,我如何模仿任务管理器在我的C#应用​​程序中做了什么?我需要能够通过Windows 10中的C#代码加载/显示桌面,就像我以前在Windows 7中所做的那样。

注意:使用任务管理器(如上所述)显示桌面是不可能的,因为这些是没有键盘的单用途PC(这是必需的)。

我的代码如下:

Process Proc = new Process();
Proc.StartInfo.FileName = "explorer";
Proc.Start();

1 个答案:

答案 0 :(得分:1)

根据我的观察,如果注册表项explorer.exe设置为HKEY_Current_User\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell(至少在XP和Win7到SP1),启动explorer.exe将只为您提供桌面。尝试在生成新进程之前将注册表项值设置为exlorer,之后您可以将其设置回应用程序。 如果这不起作用,请尝试启动userinit.exe而不是explorer.exe。 另请注意,在读者注册到注册表之前有时会有一点延迟,插入Thread.Sleep半秒钟就可以解决这个问题。