|
发表于 2010-12-21 08:48:42
|
显示全部楼层
在此順便分享一個不登大雅之堂的小技巧, Application(*.exe) 自己重啟自己或是自己更版自己 ....
■ 自己重啟自己
透過呼叫一個外部的 *.js 檔 (比 *.bat 更強) 來處理, *.js 檔只是個腳本檔(text 格式), 用 TStringList 寫好內容並 SaveToFile() 後就可以產生文件實體, 然後再用 ShellExecute() 呼叫執行它 ....
例如每天 am 04:00 一到, 主程式就執行
if (....)
{
_ReRunMe(10); // 呼叫自寫的 _ReRunMe() 函式, 並設定 10 秒後重啟自己
Close(); //把自己關閉
}
//---------------------------------------------------------------------------
void __fastcall TFmSrInLine::_ReRunMe(int ASecond)
{
//產生 ReRunMe.js 文件
TStringList *TmpList;
TmpList = new TStringList;
TmpList->Clear();
TmpList->Add("var WshShell = WScript.CreateObject(\\"WScript.Shell\\");");
TmpList->Add("WScript.Sleep("+IntToStr(ASecond*1000)+");");
TmpList->Add("WshShell.Run(\\""+ExtractFileName(Application->ExeName)+"\\");");
String ApPath=ExtractFilePath(Application->ExeName);
TmpList->SaveToFile(ApPath+"ReRunMe.js");
delete TmpList;
//呼叫 ReRunMe.js 文件
ShellExecute(NULL,NULL,"ReRunMe.js",NULL, NULL,SW_HIDE);
}
■ 自己更版自己
利用 *.js 可以獨立執行的特性, 除了 Application 可以利用它來重啟自己, 還可以在重啟過程中順便更版自己
原理如下圖示 |
|