इस तरह मैंने हाल ही में किया था। पुराना प्रोग्राम चल रहा है और नया प्रोग्रामिंग चल रहा है का एक संक्षिप्त ओवरलैप है। यह उस चाल का उपयोग करता है जिसे आप वर्तमान निष्पादन योग्य का नाम बदल सकते हैं और पुरानी को बंद करने से पहले नई फ़ाइल को स्थानांतरित कर सकते हैं। यह 100% सुरक्षित नहीं है, लेकिन एकमात्र तरीका यह है कि यह आपके एप्लिकेशन को "ईंट" कर सकता है अगर CopyFile विफल हो जाता है।
#include <windows.h>
#include <iostream>
#include <fstream>
void UpgradeService::UpgradeSelf() {
std::string temp = root + "\\myprogram_tmp.exe";
remove(temp.c_str()); // ignore return code
std::string src = upgradeFolder + "\\myprogram.exe";
std::string dst = root + "\\myprogram.exe";
rename(dst.c_str(),temp.c_str());
CopyFile(src.c_str(),dst.c_str(),false);
static char buffer[512];
strcpy(buffer,dst.c_str());
/* CreateProcess API initialization */
STARTUPINFO siStartupInfo;
PROCESS_INFORMATION piProcessInfo;
memset(&siStartupInfo, 0, sizeof(siStartupInfo));
memset(&piProcessInfo, 0, sizeof(piProcessInfo));
siStartupInfo.cb = sizeof(siStartupInfo);
::CreateProcess(buffer, // application name/path
NULL, // command line (optional)
NULL, // no process attributes (default)
NULL, // default security attributes
false,
CREATE_DEFAULT_ERROR_MODE | CREATE_NEW_CONSOLE,
NULL, // default env
NULL, // default working dir
&siStartupInfo,
&piProcessInfo);
::TerminateProcess(GetCurrentProcess(),0);
::ExitProcess(0); // exit this process
// this does not return.
}
स्रोत
2011-07-21 05:05:50
संभावित शिकार: http://stackoverflow.com/questions/250175/writing-my-own-auto-updater – crashmstr
नहीं एक शिकार, इस विशेष रूप से मूल निवासी सी ++ है। –