Перезагрузка при установке .CAB WM - PullRequest
0 голосов
/ 07 сентября 2010

На устройстве 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;

1 Ответ

2 голосов
/ 07 сентября 2010

С этой ветки Я понимаю, что необходимо сообщить процессу установки, что после установки CAB-пакета требуется перезагрузка.

Так что вместо codeINSTALL_EXIT_DONE просто верните CONFIG_S_REBOOTREQUIRED (без SetSystemPowerState).

Обычно я перезагружаю окна с ExitWindowsEx вместо SetSystemPowerState. ExitWindowsEx(EWX_REBOOT | EWX_DEFER, 0); должен перезапускаться асинхронно, давая время завершению процесса установки.

...