Руководство по реализации действий Finish-Install
Примечание
Функции, описанные в этом разделе, не поддерживаются в универсальных или мобильных пакетах драйверов. См . раздел Использование универсального INF-файла.
Действия завершения установки могут выполняться установщиком (установщиком класса, соустановщиком класса или совместным установщиком устройства). В своих действиях завершения установки установщик может запустить исполняемую программу, создать процесс, создать поток или выполнить код в процессе завершения установки драйвера устройства.
При реализации действий завершения установки в установщике учитывайте следующие рекомендации.
Действия завершения установки нельзя использовать для применения критически важных параметров, необходимых для работы устройства.
Установщик должен дождаться завершения установки, если действие завершения установки должно быть выполнено до завершения.
Например, чтобы не прерываться перезапуском системы во время выполнения действия завершения установки, установщик должен дождаться завершения установки, прежде чем установщик возвратится из обработки запроса DIF_FINISHINSTALL_ACTION .
Действие завершения установки должно информировать пользователя о ходе выполнения.
Windows не информирует пользователя о том, что выполняются действия по завершению установки, о том, что действия по завершению установки выполняются успешно или сбой. Таким образом, действие завершения установки должно сообщить пользователю о том, что выполняется действие завершения установки, а затем уведомить пользователя о том, что действие завершения установки выполнено успешно или не удалось.
Установщик должен обрабатывать ситуацию, когда для завершения действий по установке требуется перезагрузка системы.
Если для завершения установки требуется перезагрузка системы до того, как параметры вступают в силу на устройстве, установщик должен установить флаг DI_NEEDREBOOT, прежде чем он будет возвращен при обработке запроса DIF_FINISHINSTALL_ACTION . Однако при установке устройства не следует принудительно перезагружать компьютер, если это не является абсолютно необходимым.
Дополнительные сведения о том, когда для установки устройства требуется перезагрузка системы, см. в разделе Установка устройств и перезагрузка системы.
Установщик должен обрабатывать ситуацию, когда действие завершения установки завершается сбоем, но следует повторить попытку. Например, установщик может завершить установку таким образом, если устанавливаемое устройство было удалено из системы.
До Windows 8 если действие завершения установки завершается сбоем, но необходимо повторить попытку, установщик должен уведомить пользователя о временном сбое, выполнить необходимую очистку и вернуть код ошибки Win32 для запроса DIF_FINISHINSTALL_ACTION. Если установщик возвращает код ошибки Win32 для запроса DIF_FINISHINSTALL_ACTION, Windows не очищает устройство как помеченное для выполнения действия завершения установки узла устройства (devnode).
Однако, начиная с Windows 8, возврат кода ошибки не помешает снятию флага. Если действие завершения установки содержит ошибку, оно должно предоставить пользователю возможность повторно запустить его в будущем.
Хотя этот флаг остается установленным для устройства, Windows запускает новый процесс завершения установки.
Дополнительные сведения см. в разделе Выполнение действий Finish-Install.
Установщик должен обрабатывать ситуацию, когда действие завершения установки завершается сбоем и не должно предприниматься повторно.
Если из-за ошибки невозможно выполнить действие завершения установки, установщик должен уведомить пользователя о том, что действие не может быть завершено, а затем выполнить необходимую очистку. В этом случае совместный установщик должен вернуть NO_ERROR, а установщик устройства или класса — ERROR_DI_DO_DEFAULT. Windows впоследствии очистит устройство как помеченное для выполнения действия завершения установки для devnode и вызовет SetupDiFinishInstallAction для выполнения операций завершения установки по умолчанию.
Когда установщик обрабатывает код DIF_NEWDEVICEWIZARD_FINISHINSTALL DIF, он должен проверка, чтобы узнать, требуются ли какие-либо действия по завершению установки. Установщик должен устанавливать флаг DI_FLAGSEX_FINISHINSTALL_ACTION, только если необходимо выполнить действия завершения установки. Если этот флаг установлен без необходимости, пользователи получают запрос на установку дополнительного устройства во время переустановки драйвера, а DIF_FINISHINSTALL_ACTION запрос не выполняет никаких действий по завершению установки.
Например, рассмотрим совместный установщик устройства, в котором действие завершения установки устанавливает приложение, необходимое для правильной работы устройства. Например, при завершении установки для клавиатуры Майкрософт может быть установлено приложение IntelliType. Когда такой совместный установщик обрабатывает код DIF_NEWDEVICEWIZARD_FINISHINSTALL DIF, он должен проверка, чтобы проверить, установлено ли приложение. Если приложение уже установлено, действие завершения установки не выполняется, поэтому не следует устанавливать флаг DI_FLAGSEX_FINISHINSTALL_ACTION. В этом случае, если совместный установщик неправильно задает флаг DI_FLAGSEX_FINISHINSTALL_ACTION, пользователь получает нежелательный запрос контроля учетных записей (UAC) на разрешение на продолжение, даже если действие завершения установки не выполняет никаких действий.
Примечание Начиная с Windows 7, если для контроля учетных записей задано значение по умолчанию ("Уведомлять меня только при попытке программ внести изменения на мой компьютер") или более низкий параметр, операционная система не отображает запрос для пользователей с правами администратора при обработке действий завершения установки.
Перед регистрацией установщика, реализующего действия завершения установки, необходимо включить и установить все файлы, необходимые для выполнения действий finish-install, в директиву CopyFilesINF-файла для устройства. Это необходимо для размещения файлов во время установки в расположении, доступном установщику.
Дополнительные сведения о требованиях к регистрации совместного установщика устройства или класса см. в разделе Регистрация совместного установщика класса.