2016-07-17 6 views
2

Ich habe versucht, selbst-aktualisierbar Programm zu machen, aber ich kann nicht verstehen, wie exe-Datei des laufenden Programms (des aktuellen Prozesses) überschreiben. Wenn die Exe-Datei ausgeführt wird, ist sie vom Prozess gesperrt und kann nicht beschreibbar sein.C++ und Windows - Wie exe Datei des laufenden Programms zu überschreiben?

Wie Programm zu aktualisieren - ich brauche Datei, in der Nähe aktuellen Prozess und re-run aktualisierte Datei ... ist

Vielleicht dumm, meine Frage zu aktualisieren, aber ich habe dieses Problem nicht, bis ich Linux verwendet. .. Prost! I

+1

Starten Sie einen anderen Prozess (andere Datei), überschreiben Sie die exe, starten Sie erneut? – user4759923

+0

Ja, ich habe darüber nachgedacht ... Aber ich denke, es ist keine gute Lösung - es ist eine weitere Datei hinzugefügt ... –

+0

Starten Sie eine [selbst löschende ausführbare Datei] (http://www.catch22.net/) Tuts/Self-Deleting-Executables). Wenn Sie Bedenken haben, eine andere Datei zu verteilen, können Sie sie immer als binäre Ressource einpacken und bei Bedarf extrahieren. – IInspectable

Antwort

-1

Ich löste diese Frage durch das Packen der benötigten Datei in den anderen einen Wrapper über Ressourcen in MS VS.

Hier Code-Ressource in die Datei zu extrahieren:

#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; 
} 

ich es nicht 100% realisiert bin, aber ich habe Plan meine exe in die Hülle zu packen, die meine exe in das% auspacken wird Temp% Verzeichnis und startet die entpackte EXE-Datei. Die entpackte Datei wird mit DELETE_ON_CLOSE gelöscht.

Es ist nur Plan, aber ich sehe mögliche Lösung :).

Danke an alle!

+0

Wenn du meine Antwort abwählst, hinterlasse bitte einen Kommentar, warum du abstimmst. Vielen Dank! ❤ –

Verwandte Themen