gpt4 book ai didi

c++ - 安装 .CAB WM 时重新启动

转载 作者:行者123 更新时间:2023-11-28 03:55:53 25 4
gpt4 key购买 nike

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

我知道自定义操作。您需要使用 native 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 安装上看到一条礼貌的消息,上面写着 “需要重新启动才能完成安装...”,但没有 OK/Cancel 按钮。然后设备在显示消息两秒钟后重新启动。此外,可以毫无问题地卸载该软件。

我希望实现与上述其他 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;

最佳答案

来自 this线程 我知道需要通知安装过程在安装 CAB 包后需要重新启动。

因此,不是 codeINSTALL_EXIT_DONE 而是返回 CONFIG_S_REBOOTREQUIRED(没有 SetSystemPowerState)。

我通常使用 ExitWindowsEx 重新启动 Windows而不是 SetSystemPowerStateExitWindowsEx(EWX_REBOOT | EWX_DEFER, 0); 应该 异步重新启动,以便有时间完成设置过程。

关于c++ - 安装 .CAB WM 时重新启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3656985/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com