Назад | Перейти на главную страницу

Почему Windows в режиме киоска так медленно запускает приложение оболочки?

Я настраиваю Windows 7 Professional x64 для запуска пользовательского приложения в качестве оболочки в режиме «киоска». То есть замена оболочки по умолчанию (explorer.exe) с моим приложением и автологом как конкретный пользователь.

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

Я также отключил заставку с логотипом Windows при загрузке (в msconfig). Машина не находится ни в каких доменах.

Когда я включаю компьютер, я вижу экран BIOS, затем черный экран (на котором должен был быть логотип Windows), затем страница входа пользователя быстро мигает (во время автоматического входа), затем он сидит на пустом экране несколько минут.

Курсор находится на экране, но не работает. И я совершенно уверен, что это не мое приложение, потому что, когда я запускаю его в обычном сценарии рабочего стола, оно запускается очень быстро. Это плохой опыт для пользователя запускающий киоск или приближающийся к киоску после его загрузки, но до запуска приложения.

Кто-нибудь знает, что Windows делает за кулисами в режиме киоска, что может объяснить эту задержку? Или как отследить, что происходит?

Или у кого-нибудь есть какие-нибудь причудливые идеи, как обмануть пользователя, заставив его думать, что киоск работает? (Я не знаю, что еще я могу контролировать в этот момент при запуске киоска Windows ... могу ли я отобразить фоновое изображение вместо серого / синего экрана?)

Скорее всего, вы не сообщаете 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 секунд с момента запуска.

Убедитесь, что нет подключенных дисков, недоступных с того места, где установлен ваш киоск. Если вы подключаете диск в своей лаборатории или испытательном центре и пытаетесь получить к нему доступ из места без доступа к сети, вход в систему займет слишком много времени, пока Windows не поймет, что удаленный диск недоступен.