安装.CAB WM时重新启动

时间:2010-09-07 08:27:04

标签: c++ deployment windows-mobile installer cab

在Windows Mobile 6或CE 5设备上,我需要安装CAB文件,然后重新启动。

我知道自定义操作。您需要在本机C ++中为CAB文件创建setup.dll。

所以我已经制作了以下代码

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..."没有确定/取消按钮。然后设备在显示消息两秒后重新启动。此外,可以毫无问题地卸载该软件。

我希望实现与上述其他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 个答案:

答案 0 :(得分:2)

this线程我明白需要通知安装过程在安装CAB软件包后需要重新启动。

所以代替codeINSTALL_EXIT_DONE只返回CONFIG_S_REBOOTREQUIRED(没有SetSystemPowerState)。

我通常使用ExitWindowsEx而不是SetSystemPowerState重新启动窗口。ExitWindowsEx(EWX_REBOOT | EWX_DEFER, 0); 异步重启,为设置过程留出时间完成。