以下是一个黑客,但对于我需要它的罚款。
我创建了一个 C# 程序,它显示一些 EULA 文本并有一个同意和不同意按钮。
我设置了HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell启动那个程序。
当计算机启动时,显示正常的登录提示。
登录后,自定义 EULA 程序启动。
没有资源管理器外壳,没有开始菜单,没有背景等(这是我想要的)。
不同意按钮关闭电脑并正常工作。
我希望“同意”按钮加载正常的 Windows 资源管理器外壳(开始菜单、背景等)。
我使用了以下 C# 命令: Process.Start("explorer.exe");
然而,这会启动一个资源管理器窗口,而不是外壳。我想要 shell 启动。
我错过了什么?
小智 5
在 Windows10 中,要重新启动 Explorer 桌面,您必须将 Shell 注册表项设置为“explorer.exe”并终止进程“sihost.exe”或重新启动新的“sihost.exe”进程。
我做了与你完全相同的事情,这是我启动资源管理器的方式
Process explorer = new Process();
explorer.StartInfo.FileName =
Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Windows), "explorer.exe");
if (explorer.Start() == false)
{
MessageBox.Show("Explorer failed to start.");
}
else
{
//(Snip) some other code that is not relevant.
explorer.WaitForExit();
}
//(Snip) some cleanup code I run after the user logs off.
Run Code Online (Sandbox Code Playgroud)
而且效果很好。
现在,我使用此组策略( Computer Configuration\Administrative Templates\Windows Components\Remote Desktop Services\Remote Desktop Session Host\Remote Session Environment\Start a program on connection) 在 RDP 会话中执行此操作,而不是通过您正在使用的注册表文件,所以也许这就是它适用于我而不适合您的原因。
我可能做的另一件事是,我还调用explorer.WaitForExit();我的代码并等待资源管理器自行关闭,然后再关闭我的应用程序。
尝试使用我启动资源管理器的方式,看看它是否适合您。