为什么处于 kiosk 模式的 Windows 启动 shell 应用程序这么慢?

为什么处于 kiosk 模式的 Windows 启动 shell 应用程序这么慢?

我正在配置 Windows 7 Professional x64,以在“kiosk”模式下运行自定义应用程序作为 shell。也就是说,explorer.exe用我的应用程序替换默认 shell (),并以特定用户身份自动登录。

[HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon]
"AutoAdminLogon"="1"
"DefaultUserName"="applicationuser"
"Shell"="c:\Program Files\my-app\whatever.exe"

我还关闭了启动时的 Windows 徽标启动画面(在 msconfig 中)。该机器不在任何域中。

当我打开机器电源时,我看到了 BIOS 屏幕,然后是黑屏(Windows 徽标所在的位置),然后用户登录页面快速闪烁(在自动登录期间),然后屏幕空白了几分钟

光标在屏幕上但无法操作。我很确定这不是我的应用程序的问题,因为当我在常规桌面场景中运行它时,它启动得非常快。这对用户来说是一次糟糕的体验即启动信息亭,或者在信息亭启动后、应用程序启动之前接近信息亭。

有谁知道 Windows 在 kiosk 模式下后台执行了什么操作,这也许可以解释这种延迟?或者如何追踪发生了什么?

或者是否有人有任何奇思妙想,可以诱使用户认为信息亭正在运行?(我不知道此时在 Windows 信息亭启动时我还能控制什么......我可以弹出背景图像而不是单调的绿色/蓝色屏幕吗?)

答案1

最有可能的是,您没有告诉 Winlogon 您的应用程序已准备就绪。将以下代码放在 main() 的顶部(这都是 C++,因此您可能需要将其翻译成您选择的语言):

/*
 * Signal to Winlogon that the shell has started and the login screen can be dismissed
 */
HANDLE hShellReadyEvent;
hShellReadyEvent = OpenEvent(EVENT_MODIFY_STATE, false, L"msgina: ShellReadyEvent");
if( hShellReadyEvent != NULL )
{
    SetEvent( hShellReadyEvent );
    CloseHandle( hShellReadyEvent );
}

这将使您的启动过程节省至少 30 秒。

答案2

确保没有从安装信息亭的地方无法访问的映射驱动器。如果您在实验室或测试设施中映射驱动器并尝试从没有网络访问权限的地方访问它,则登录需要很长时间,直到 Windows 意识到远程驱动器无法访问。

相关内容