0

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;
4

1 に答える 1

2

このスレッドから、CABパッケージのインストール後に再起動が必要であることをインストールプロセスに通知する必要があることを理解しています。

したがって、codeINSTALL_EXIT_DONE単に戻るのではCONFIG_S_REBOOTREQUIREDなく(SetSystemPowerStateなしで)。

ExitWindowsEx私は通常、の代わりにでウィンドウを再起動しますSetSystemPowerState。非同期で再起動し、セットアッププロセスが完了するまでの時間を与えるExitWindowsEx(EWX_REBOOT | EWX_DEFER, 0); 必要があります。

于 2010-09-07T08:40:01.300 に答える