特色:
完全或差异更新
静默更新

每件压缩
分离的数据库
Web做事器准备您须要一个不错的PHP版本。我自己的做事器运行PHP7.3,但是该脚本将在旧版本中运行。它利用SQLite3创建数据库,您可以对其进行编辑以支持MySql或其他任何办法。
编辑tu.php以变动数据库名称和默认的管理员用户名+密码。
将tu.php上传到您的做事器。
转到tu.php?admin。有一个大略的管理面板,可用于管理项目。要创建项目,请指定名称和上传密码。
创建后,管理面板会天生一个GUID,该GUID将放置在Windows运用程序中以引用该项目。
PHP管理面板管理员面板显示:
真空数据库选项
拆分数据库的选项。拆分数据库在其外部具有文件数据,因此SQLite3数据库不会增长。
如果拆分,则选择再次加入数据库。
项目列表,个中包含以下文件:
名称
ID
尺寸
直接链接
压缩/解压缩选项
直接下载次数
补丁数
支票数量
上载后将重置末了的统计信息。
Windows运用程序包括tu.hpp
实例化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复制代码类型:[cpp]
参数:
由tu.php管理面板创建的唯一项目GUID
主机名
PHP脚本的路径
SSL的true/false
可选端口(如果利用0、80或443)
InternetConnect()功能标志
做事器的可选用户名/密码
上载密码(如果您打算上载文件)
之后,利用AddFiles()member添加该库将引用的文件。每个文件都有一个本地路径和一个远程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复制代码类型:[cpp]
还AddSelf()可以自动添加您自己的可实行文件。
将更新上传到您的做事器HRESULT Upload (std::function<HRESULT(size_t sent, size_t total, void)> func = nullptr,void lp = 0);HRESULT hr = tu.Upload();1234复制代码类型:[cpp]
它利用我不错的REST库与PHP脚本通信,并利用ZipUtils压缩要上传的数据,仅此而已。常日,您不会从您的运用中调用此功能,由于它须要上传密码,并且您不肯望其他人通过嗅探连接来学习该密码。常日,您将利用单独的“上载器”。该函数将所有项目压缩到一个ZIP文件中,并将其发送到tu.php。
github仓库有一个示例“uploader”,它从XML配置上传项目。
该函数接管一个可选的回调,只要您正在上传文件,该回调便会重复调用。E_FAIL从中返回以停滞上传。
查询更新HRESULT Check();HRESULT hr = tu.Check();12复制代码类型:[cpp]
返回S_OK是否所有检讨的文件都是最新的,或者S_FALSE是否有任何文件须要更新。
更新中HRESULT DownloadFull(std::function<HRESULT (unsigned long long, unsigned long long, void)> func = nullptr, void lp = 0);12复制代码类型:[cpp]
自动下载所有须要下载的文件并更新它们。通过将当前文件移动到.OLD文件中,创建一个新目标,然后将OLD文件标记为要删除,此功能还可以与正在利用的文件(例如您自己的运用程序)一起利用。这样,您可以用几行代码轻松地进行自我更新,而您的用户将永久不会把稳到它:下次启动运用程序时,更新将在那里。
差异检讨常日,由于一个大略的缺点,您只须要重新编译即可,但是您的EXE已经是10MB。当所有不同的只是文件的一小部分时,重新下载全体文件是否可惜?
在这里,我出色的DIFF库发挥了浸染。实际上,TU::Upload()不仅将您的数据上传到做事器,而且还会为每个项目打算一个署名并上传。现在您可以检讨:
HRESULT CheckWithSigs(std::function<HRESULT (unsigned long long, unsigned long long, void)> func = nullptr, void lp = 0);12复制代码类型:[cpp]
此功能类似于simpleCheck(),但它也下载须要更新的文件的署名。返回此函数后S_FALSE,您就知道须要更新,请致电:
HRESULT DownloadDiff(std::function<HRESULT (unsigned long long, unsigned long long, void)> func = nullptr, void lp = 0);12复制代码类型:[cpp]
此函数的行为与完备相同Download(),但是它仅要求从做事器变动的部分,而不是全体下载。因此,利用该DIFF库将更快地更新文件。好是,它以差异办法而不是增量办法事情。这意味着,无论本地项目有多旧,该函数都会打算它的不同部分并向做事器要求。当然,如果本地项目不存在,该功能将完备重新下载它。
一次性void OneOff(const char r,bool RunNow = false,HICON hIc = LoadIcon(0,IDI_INFORMATION),bool NoDiff = false);1复制代码类型:[cpp]
许可单个EXE在具有Icon支持和下载对话框的一行中检讨,下载和更新自身。一行更新!