|
我討厭那些不會自動更新的應(yīng)用程序。真的。這是一個(gè)可以自動為您完成所有工作的庫。您需要一個(gè)能夠運(yùn)行PHP的Web服務(wù)器來存儲更新,僅此而已!
特征: 完整或差異更新 靜默更新 每件壓縮 分離的數(shù)據(jù)庫 Web服務(wù)器準(zhǔn)備您需要一個(gè)不錯(cuò)的PHP版本。我自己的服務(wù)器運(yùn)行PHP7.3,但是該腳本將在舊版本中運(yùn)行。它使用SQLite3創(chuàng)建數(shù)據(jù)庫,您可以對其進(jìn)行編輯以支持MySql或其他任何方式。 編輯tu.php以更改數(shù)據(jù)庫名稱和默認(rèn)的管理員用戶名+密碼。 將tu.php上傳到您的服務(wù)器。 轉(zhuǎn)到tu.php?admin。有一個(gè)簡單的管理面板,可用于管理項(xiàng)目。要創(chuàng)建項(xiàng)目,請指定名稱和上傳密碼。 創(chuàng)建后,管理面板會生成一個(gè)GUID,該GUID將放置在Windows應(yīng)用程序中以引用該項(xiàng)目。 PHP管理面板管理員面板顯示: 真空數(shù)據(jù)庫選項(xiàng) 拆分?jǐn)?shù)據(jù)庫的選項(xiàng)。拆分?jǐn)?shù)據(jù)庫在其外部具有文件數(shù)據(jù),因此SQLite3數(shù)據(jù)庫不會增長。 如果拆分,則選擇再次加入數(shù)據(jù)庫。 項(xiàng)目列表,其中包含以下文件: 名稱 ID 尺寸 直接鏈接 壓縮/解壓縮選項(xiàng) 直接下載次數(shù) 補(bǔ)丁數(shù) 支票數(shù)量 上載后將重置最后的統(tǒng)計(jì)信息。 Windows應(yīng)用程序包括tu.hpp 實(shí)例化TU::TU對象: TU(const char* prjg,const wchar_t* host,const wchar_t* path,bool SSL = false,unsigned short Port = 0,DWORD flg = 0,const wchar_t* un = 0,const wchar_t* pwd = 0,const wchar_t* uploadpwd = 0)123復(fù)制代碼類型:[cpp] 參數(shù): 由tu.php管理面板創(chuàng)建的唯一項(xiàng)目GUID 主機(jī)名 PHP腳本的路徑 SSL的true/false 可選端口(如果使用0、80或443) InternetConnect()功能標(biāo)志 服務(wù)器的可選用戶名/密碼 上載密碼(如果您打算上載文件) 之后,使用AddFiles()member添加該庫將引用的文件。每個(gè)文件都有一個(gè)本地路徑和一個(gè)遠(yuǎn)程ID(guid): vector<tuple<wstring, string>> tux;auto a = L"m.docx";
tux.emplace_back(make_tuple<wstring,
string>(forward<wstring>(a), string("A44BC1B3-D919-4835-A7D8-FC633EB7B7EC")));auto b = L"m.pdf";
tux.emplace_back(make_tuple<wstring,
string>(forward<wstring>(b), string("A44BC1B3-D919-4835-A7D8-FC633EB7B7ED")));
tu.AddFiles(tux);123456789復(fù)制代碼類型:[cpp]還AddSelf()可以自動添加您自己的可執(zhí)行文件。 將更新上傳到您的服務(wù)器HRESULT Upload (std::function<HRESULT(size_t sent, size_t total, void*)> func = nullptr,void* lp = 0); HRESULT hr = tu.Upload();1234復(fù)制代碼類型:[cpp] 它使用我不錯(cuò)的REST庫與PHP腳本通信,并使用ZipUtils壓縮要上傳的數(shù)據(jù),僅此而已。通常,您不會從您的應(yīng)用中調(diào)用此功能,因?yàn)樗枰蟼髅艽a,并且您不希望其他人通過嗅探連接來學(xué)習(xí)該密碼。通常,您將使用單獨(dú)的“上載器”。該函數(shù)將所有項(xiàng)目壓縮到一個(gè)ZIP文件中,并將其發(fā)送到tu.php。 github倉庫有一個(gè)示例“uploader”,它從XML配置上傳項(xiàng)目。 該函數(shù)接受一個(gè)可選的回調(diào),只要您正在上傳文件,該回調(diào)便會重復(fù)調(diào)用。E_FAIL從中返回以停止上傳。 查詢更新HRESULT Check(); HRESULT hr = tu.Check();12復(fù)制代碼類型:[cpp] 返回S_OK是否所有檢查的文件都是最新的,或者S_FALSE是否有任何文件需要更新。 更新中HRESULT DownloadFull(std::function<HRESULT (unsigned long long, unsigned long long, void*)> func = nullptr, void* lp = 0);12復(fù)制代碼類型:[cpp] 自動下載所有需要下載的文件并更新它們。通過將當(dāng)前文件移動到.OLD文件中,創(chuàng)建一個(gè)新目標(biāo),然后將OLD文件標(biāo)記為要刪除,此功能還可以與正在使用的文件(例如您自己的應(yīng)用程序)一起使用。這樣,您可以用幾行代碼輕松地進(jìn)行自我更新,而您的用戶將永遠(yuǎn)不會注意到它:下次啟動應(yīng)用程序時(shí),更新將在那里。 差異檢查通常,由于一個(gè)簡單的錯(cuò)誤,您只需要重新編譯即可,但是您的EXE已經(jīng)是10MB。當(dāng)所有不同的只是文件的一小部分時(shí),重新下載整個(gè)文件是否可惜? 在這里,我出色的DIFF庫發(fā)揮了作用。實(shí)際上,TU::Upload()不僅將您的數(shù)據(jù)上傳到服務(wù)器,而且還會為每個(gè)項(xiàng)目計(jì)算一個(gè)簽名并上傳。現(xiàn)在您可以檢查: HRESULT CheckWithSigs(std::function<HRESULT (unsigned long long, unsigned long long, void*)> func = nullptr, void* lp = 0);12復(fù)制代碼類型:[cpp] 此功能類似于simpleCheck(),但它也下載需要更新的文件的簽名。返回此函數(shù)后S_FALSE,您就知道需要更新,請致電: HRESULT DownloadDiff(std::function<HRESULT (unsigned long long, unsigned long long, void*)> func = nullptr, void* lp = 0);12復(fù)制代碼類型:[cpp] 此函數(shù)的行為與完全相同Download(),但是它僅請求從服務(wù)器更改的部分,而不是整個(gè)下載。因此,使用該DIFF庫將更快地更新文件。好消息是,它以差異方式而不是增量方式工作。這意味著,無論本地項(xiàng)目有多舊,該函數(shù)都會計(jì)算它的不同部分并向服務(wù)器請求。當(dāng)然,如果本地項(xiàng)目不存在,該功能將完全重新下載它。 一次性void OneOff(const char* r,bool RunNow = false,HICON hIc = LoadIcon(0,IDI_INFORMATION),bool NoDiff = false);1復(fù)制代碼類型:[cpp] 允許單個(gè)EXE在具有Icon支持和下載對話框的一行中檢查,下載和更新自身。一行更新! |
|
|