0

現在実行中のアプリケーションを閉じてインストーラーを起動する必要がある自動アップデーターを実装しています。

私が使用したコードは次のとおりです。

if (ExecuteAsAdmin(m_filePath))
    PostQuitMessage(0);

BOOL ExecuteAsAdmin( LPCTSTR filePath )
{
    SHELLEXECUTEINFO shExecInfo = {0};

    shExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);

    shExecInfo.fMask = SEE_MASK_CLASSNAME;
    shExecInfo.lpClass = _T("exefile");
    shExecInfo.hwnd = NULL;
    shExecInfo.lpVerb = _T("runas");
    shExecInfo.lpFile = filePath;
    shExecInfo.lpParameters = NULL;
    shExecInfo.lpDirectory = NULL;
    shExecInfo.nShow = SW_NORMAL;
    shExecInfo.hInstApp = NULL;

    return ShellExecuteEx(&shExecInfo);
}

これで十分ですか?

4

1 に答える 1

2

必ずしもアプリケーションを終了する必要はありません。

Windows では、使用中の DLL と EXE を上書きすることはできません。ただし、名前を変更することはできます。

したがって、アプリケーションはすべてのバイナリの名前を変更し、インストーラーを実行できます。インストーラーは、アプリケーションに影響を与えることなく同時に実行できます (他のテキスト ファイルは除きますが、それについては後ほど説明します)。このようにして、インストーラーは必要なことを何でも行うことができます (現在のすべてのバイナリーの名前が変更されるため)。

インストール後、アプリケーションは、再起動時にのみ変更が表示されることをユーザーに通知できます。

再起動する前に、現在の設定 (ある場合) を保存して、インストーラーによってインストールされたストック ファイルを置き換えます。また、アプリケーションが再起動時に名前が変更されたファイルを削除することを確認してください。

お役に立てれば!

于 2013-05-22T05:42:15.693 に答える