我尝试制作可自动更新的程序,但我无法理解,如何覆盖正在运行的程序(当前进程)的exe文件。当Exe文件运行时,它被进程锁定并且无法写入。
如何更新程序 - 我需要更新文件,关闭当前进程并重新运行更新的文件......
也许我的问题很愚蠢,但我没有这个问题,直到我使用Linux ... 干杯! ❤
答案 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删除解压缩的文件。
这只是计划,但我看到了可能的解决办法:)。
感谢所有人!