在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;
答案 0 :(得分:2)
从this线程我明白需要通知安装过程在安装CAB软件包后需要重新启动。
所以代替codeINSTALL_EXIT_DONE
只返回CONFIG_S_REBOOTREQUIRED
(没有SetSystemPowerState)。
我通常使用ExitWindowsEx
而不是SetSystemPowerState
重新启动窗口。ExitWindowsEx(EWX_REBOOT | EWX_DEFER, 0);
应异步重启,为设置过程留出时间完成。