char* BATFILE = "1.bat"; // путь к батникуchar* PARAM = UnicodeString("\"" + Application.ExeName + "\"").t_str(); // параметр батника - путь к нашей проге, кот. убиваем :)ShellExecute(NULL, "open", BATFILE, PARAM, NULL, SW_HIDE);
/////////////////////////////////////////////////////////////////////////////// Класс для обновления выполняемого EXE файла.// Информация об источнике обновления находится в INI-файле, передаваемом как параметр// в секции Update, параметре Source//class PACKAGE CSelfUpdate{private: String Source ; String Self ; bool FilesExists; bool SetupUpdate;public: // Информация об источнике обновления читается из INI файла // Self - собственно обновляемый файл // Section - наименование секции CSelfUpdate(const String Self, const String IniFileName, const String Section, const String SetupUpdateParameter, const String SetupSourceParameter, const String SourceParameter); // Указывается путь к более новому файлу CSelfUpdate(const String Self, const String Path); void Execute(const String AppTitle);};
CSelfUpdate::CSelfUpdate(const String Self, const String IniFileName, const String Section, const String SetupUpdateParameter, const String SetupSourceParameter, const String SourceParameter): Self(Self), Source(NULL), SetupUpdate(false), FilesExists(false){ auto_ptr<TIniFile> f = auto_ptr<TIniFile>(new TIniFile(IniFileName)); SetupUpdate = f->ReadBool(Section, SetupUpdateParameter, false); if (SetupUpdate) { Source = f->ReadString(Section, SetupSourceParameter, ""); } else { Source = f->ReadString(Section, SourceParameter, "") + "\\" + ExtractFileName(Self); } FilesExists = FileExists(Self) && FileExists(Source);} CSelfUpdate::CSelfUpdate(const String Self, const String Path): Self(Self), Source(Path), SetupUpdate(false), FilesExists(false){ //auto_ptr<TIniFile> f = auto_ptr<TIniFile>(new TIniFile(IniFileName)); //SetupUpdate = f->ReadBool(Section, SetupUpdateParameter, false); FilesExists = FileExists(Self) && FileExists(Source);} void CSelfUpdate::Execute(const String AppTitle){ if (!FilesExists) return; if (SetupUpdate) { MessageBox(NULL, "Найдено обновление программы. Будет запущен устанавливающий модуль. По окончании его работы запустите программу вновь.", AppTitle.c_str(), MB_APPLMODAL + MB_ICONINFORMATION); spawnlp(P_OVERLAY, Source.c_str(), "", NULL); } else { typedef CFileVersion V; if (!(V(Self) < V(Source))) return; String OldFileName = ChangeFileExt(Self, ".old"); if(FileExists(OldFileName) && !DeleteFile(OldFileName)) return; RenameFile(Self, OldFileName); CopyFile(Source.c_str(), Self.c_str(), false); spawnlp(P_OVERLAY, Self.c_str(), "", NULL); }}
char* BATFILE = "c:\\1.bat"; // путь к батникуchar* PARAM = UnicodeString("\"" + Application->ExeName + "\"").t_str(); // параметр батника - путь к нашей проге, кот. убиваем :)ShellExecute(NULL, "open", BATFILE, PARAM, NULL, SW_HIDE);Application->Terminate();