打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
TU:适用于您项目的简易更新库

  我讨厌那些不会自动更新的应用程序。真的。这是一个可以自动为您完成所有工作的库。您需要一个能够运行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支持和下载对话框的一行中检查,下载和更新自身。一行更新!

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
文件结构化存储技术与应用
LightOPC.h中的定义说明之一
VB Api简单入门(4)
Microsoft Visual C++
常见图片格式详解
终于有一篇文章可以把C与C的区别说清楚了
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服