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 回答