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

时间:2016-07-17 11:57:23

标签: c++ windows locking

我尝试制作可自动更新的程序,但我无法理解,如何覆盖正在运行的程序(当前进程)的exe文件。当Exe文件运行时,它被进程锁定并且无法写入。

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

也许我的问题很愚蠢,但我没有这个问题,直到我使用Linux ... 干杯! ❤

1 个答案:

答案 0 :(得分:-1)

我通过MS VS中的Resources将所需文件打包到另一个包装器中解决了这个问题。

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

#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删除解压缩的文件。

这只是计划,但我看到了可能的解决办法:)。

感谢所有人!