На устройстве Windows Mobile 6 или CE 5 мне нужно установить CAB-файл, а затем инициировать перезагрузку.
Я знаю о пользовательских действиях. Вам нужно создать файл setup.dll для CAB-файла на нативном C ++.
Итак, у меня уже есть следующий код
codeINSTALL_EXIT Install_Exit(HWND hwndParent,
LPCTSTR pszInstallDir,
WORD cFailedDirs,
WORD cFailedFiles,
WORD cFailedRegKeys,
WORD cFailedRegVals,
WORD cFailedShortcuts)
{
MessageBox(hwndParent,
_T("A reboot is required to complete installation, Press OK to reboot."),
_T("Reboot required"),
MB_OK);
SetSystemPowerState(NULL, POWER_STATE_RESET, 0);
return codeINSTALL_EXIT_DONE;
}
SetSystemPowerState выполнит горячую загрузку устройства. Проблема в том, что, поскольку установка не завершается (код возврата INSTALL_EXIT_DONE
не достигнут), он жалуется, что не может установить приложение, когда вы пытаетесь удалить его позднее. Удаление перезагрузки - это мгновенное решение этой проблемы.
Я видел в других установках .CAB вежливое сообщение с текстом "A restart is required to complete installation..."
без кнопки OK / Отмена. Затем устройство перезагружается через две секунды после отображения сообщения. Кроме того, это программное обеспечение может быть удалено без проблем.
Я стремлюсь к достижению той же функциональности, что и в других CAB-файлах, таких как приведенные выше, всплывающего окна системы тайм-аута с последующей перезагрузкой и возможностью удаления приложения из опции удаления программ на устройстве.
Другое возможное решение, которое я нашел вчера, заключалось в том, чтобы вместо этого вернуть CONFIG_S_REBOOTREQUIRED. Однако это не определено и как таковое не будет компилироваться. Определенные возвраты для codeINSTALL_EXIT приведены ниже.
Using typedef enum
{
codeINSTALL_EXIT_DONE = 0, // @comm Exit the installation successfully
codeINSTALL_EXIT_UNINSTALL // @comm Uninstall the application before exiting the installation
}
codeINSTALL_EXIT;