前面有介紹透過Google雲端來更新程式。
首先取得自己的程式版號
//取版號
function GetFileVersion: String;
var
mStr:String;
i:integer;
begin
mStr := GetVersionInfo('FileVersion') ;
While Pos('.', mStr)>0 do
begin
I := Pos('.',mStr);
Delete(mStr, I, 1);
end ;
Result := mStr;
end;
下面這是非作者所寫,幫他用藍色字框起來.....非原作
//原型
function GetVersionInfo(AIdent: String): String;
type
TLang = packed record
Lng, Page: WORD;
end;
TLangs = array [0 .. 10000] of TLang;
PLangs = ^TLangs;
var
BLngs: PLangs;
BLngsCnt: Cardinal;
BLangId: String;
RM: TMemoryStream;
RS: TResourceStream;
BP: PChar;
BL: Cardinal;
BId: String;
begin
// Assume error
Result := '';
RM := TMemoryStream.Create;
try
// Load the version resource into memory
RS := TResourceStream.CreateFromID(HInstance, 1, RT_VERSION);
try
RM.CopyFrom(RS, RS.Size);
finally
FreeAndNil(RS);
end;
// Extract the translations list
if not VerQueryValue(RM.Memory, '\\VarFileInfo\\Translation', Pointer(BLngs), BL) then
Exit; // Failed to parse the translations table
BLngsCnt := BL div sizeof(TLang);
if BLngsCnt <= 0 then
Exit; // No translations available
// Use the first translation from the table (in most cases will be OK)
with BLngs[0] do
BLangId := IntToHex(Lng, 4) + IntToHex(Page, 4);
// Extract field by parameter
BId := '\\StringFileInfo\\' + BLangId + '\\' + AIdent;
if not VerQueryValue(RM.Memory, PChar(BId), Pointer(BP), BL) then
Exit; // No such field
// Prepare result
Result := BP;
finally
FreeAndNil(RM);
end;
end;
OK這時候我們就能透過indyHttp 來比較線上版本以及本地端版本的差異了
接著把程式封裝成一隻安裝的EXE
可以用這個工具,非常的好用重點是他一定是Delphi 寫出來的必須得支持哈哈
Delphi 對於個人用戶的收費方式實在是讓人覺得有點難以接受.....
工具名稱是這個
點選連結可以過去。
怎麼使用的話可以參考這個網址
太進階的我也不會我只會傻呼呼包裝。剩下給程式做
當前面動作都完成之後,依樣上傳到GOOGLE透過INDY抓取主程式
抓下來之後將路徑切換成執行目錄下再利用
ShellExecute(0, PChar('open'), PChar(Version), nil, nil, SW_SHOW);
執行他 同時關閉應用程式。則不會被占用所影響
..