C++ C++;和Windows-如何覆盖正在运行的程序的exe文件?
我试图制作一个可自我更新的程序,但我不明白如何重写(当前进程的)正在运行的程序的exe文件。运行Exe文件时,该文件被进程锁定,无法写入 如何更新程序-我需要更新文件,关闭当前进程并重新运行更新的文件 也许我的问题很傻,但我没有这个问题,直到我使用Linux。。。C++ C++;和Windows-如何覆盖正在运行的程序的exe文件?,c++,windows,locking,C++,Windows,Locking,我试图制作一个可自我更新的程序,但我不明白如何重写(当前进程的)正在运行的程序的exe文件。运行Exe文件时,该文件被进程锁定,无法写入 如何更新程序-我需要更新文件,关闭当前进程并重新运行更新的文件 也许我的问题很傻,但我没有这个问题,直到我使用Linux。。。 干杯❤ 我通过MS VS中的资源将所需文件打包到另一个包装器中,从而解决了这个问题 以下是将资源提取到文件中的代码: #include "stdafx.h" #include "resource.h" #include "window
干杯❤ 我通过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文件。解压后的文件将在删除打开关闭时被删除
这只是一个计划,但我看到了可能的解决方案:)
谢谢大家 启动另一个进程(不同的文件),覆盖exe,重新启动?是的,我考虑过了。。。但是,我认为,这不是一个好的解决方案——它添加了另一个文件…启动一个。如果您担心分发另一个文件,您可以将其包装为二进制资源,并根据需要提取它。Hi。我无法理解“作为二进制资源,按需提取”这句话。你能提供一些关于这个的教程吗?非常感谢。你可以进行一些研究和网络搜索。这是一个太宽泛的问题,所以,虽然,因为它本质上是“我如何制作一个安装程序”,而不是一个具体的问题,关于一个具体的编程代码。如果你否决我的答案,请留下评论,为什么你否决投票。非常感谢。❤