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

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

[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... могу ли я выплеснуть фоновое изображение вместо серого или синего экрана?)

2 ответа

Решение

Скорее всего, вы не говорите 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 не поймет, что удаленный диск недоступен.

Другие вопросы по тегам