C++和Windows-如何覆盖正在运行的程序的exe文件

C++ and Windows - how to overwrite exe file of the running program?

本文关键字:运行 程序 文件 exe 覆盖 Windows- 何覆盖 C++      更新时间:2023-10-16

我试图制作可自我更新的程序,但我不明白如何重写(当前进程的)运行程序的exe文件。当Exe文件正在运行时,它被进程锁定,无法写入。

如何更新程序-我需要更新文件,关闭当前进程并重新运行更新的文件。。。

也许我的问题很傻,但我没有这个问题,直到我使用Linux。。。干杯❤

我通过MS VS中的参考资料将所需文件打包到另一个包装器中,从而解决了这个问题。

以下是将资源提取到文件中的代码:

#include "stdafx.h"
#include "resource.h"
#include "windows.h"

int main()
{
    HRSRC hrsrc = FindResource(NULL, MAKEINTRESOURCE(IDR_BINARYTYPE1), _T("BINARYTYPE"));
        //FindResource(NULL, MAKEINTRESOURCE(IDR_BINARYTYPE1), RT_BITMAP);
    HGLOBAL hLoaded = LoadResource(NULL, hrsrc);
    LPVOID lpLock = LockResource(hLoaded);
    DWORD dwSize = SizeofResource(NULL, hrsrc);
    HANDLE hFile = CreateFile(TEXT("c:/temp/zxcv.exe"), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
    DWORD dwByteWritten;
    WriteFile(hFile, lpLock, dwSize, &dwByteWritten, NULL);
    CloseHandle(hFile);
    FreeResource(hLoaded);
    return 0;
}

我还没有100%意识到这一点,但我计划将我的exe打包到包装器中,这将把我的exe解压到%Temp%目录中,并开始解压exe文件。未打包的文件将使用DELETE_ON_CLOSE删除。

这只是一个计划,但我看到了可能的解决方案:)。

感谢大家!