我讨厌那些不会自动更新的应用程序。真的。这是一个可以自动为您完成所有工作的库。您需要一个能够运行PHP的Web服务器来存储更新,仅此而已! 特征: 完整或差异更新 静默更新 每件压缩 分离的数据库 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支持和下载对话框的一行中检查,下载和更新自身。一行更新! |
|