Windows Mobile6またはCE5デバイスで、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..."
[OK]/[キャンセル]ボタンがないという丁寧なメッセージが表示されます。次に、メッセージが表示されてから2秒後に、デバイスが再起動します。さらに、このソフトウェアは問題なくアンインストールできます。
上記のような他のCABファイルに見られるのと同じ機能、タイムアウトシステムポップアップ、その後の再起動、およびデバイスの[プログラムの削除]オプションからアプリケーションをアンインストールする機能を実現しようとしています。
昨日見つけたもう1つの解決策は、代わりに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;