最近在研究软件的自动更新功能,手动更新太麻烦而且对电脑小白来说容易出错。之前对自动更新没什么概念,不知道如何实现。简单百度之后,原来“更新”功能是一个单独的模块,在需要更新的时候启动这个模块,然后将主程序的相关文件更新,以达成更新主程序功能的目的。那么,有两个问题:1.什么时候启动更新?2.如何更新主程序的相关文件?

我的思路是:在服务器某个位置放置一个文件,这个文件里存放了需要更新文件的列表以及一个类似版本号的标识。主程序每次启动的时候 如果是联网状态下,就去读取这个文件中的“版本标识”来和自身的版本标识比较,如果自身的版本标识低于站点的这个标识就启动更新程序,获取列表中所表明的需要更新的文件,存放到指定位置即可完成更新。那么如何获取这些文件呢?应该是要使用下载功能。

文件列表和版本号这个好实现,最不济弄个txt文件存储,然后解析一下就行。下载这个功能比较麻烦,C#的http命名空间里有下载功能的类,不太好用,虽然没怎么深入研究过。当然,我是小白一个,再怎么深入研究也玩不出什么花来,就想吃现成的。网上疯狂搜罗一番,发现迅雷云加速开放平台比较对我的胃口,就它了。不过可惜的是,正式的SDK申请已经在3年前暂停了,看样子也没有恢复申请的迹象。不过好在还有个试用版的SDK可以用,对付我这个小功能应该是绰绰有余了。好在我当时顺手把这个试用版的SDK保存下来了,不然我现在能悔死,因为现在整个下载页面都打不开了。

材料有了,怎么用又是个问题。接口代码全是C/C++,而我用的是C#!SDK压缩包里提供了一个更新日志txt文件、一个xldl.dll文件、一个xldl.h文件还有一个download文件夹。真正可以直接交互的就是xldl.dll动态链接库,xldl.h文件定义了需要用的的一些类型。居然没有示例文档!!!虽然我的水平烂到你把文档给我了我也未必能看懂,但是你不给我,那我就真是抓瞎了。网上兜兜转转找到一个“基础教程”压缩包,里面是个word文档,有一段完整的示例代码。如获至宝,赶紧下载下来。文档一个5页,代码占了3页,示例截图占1页,说明文字占1页。信息量忒少了点,不过好过没有。完整代码如下:

#include"stdafx.h"
#include<Windows.h>
#include<iostream>
#include<stdio.h>
#include<tchar.h>
#include<tchar.h>
#include<Shlwapi.h>
#include"assert.h"
#pragmacomment(lib,"shlwapi.lib")
#include"xldl.h"voidDownloadFile(DownWrapper* pWapper,conststd::wstring&wstrUrl,conststd::wstring&wstrFilename,conststd::wstring&wstrSavePath);int_tmain(intargc, _TCHAR* argv[])
{  assert(argc>= 3);WCHARszModulePath[MAX_PATH] = {0};::GetModuleFileName(NULL, szModulePath, MAX_PATH);::PathRemoveFileSpec(szModulePath);WCHARszDllpath[MAX_PATH] = {0};::PathCombine(szDllpath, szModulePath, L"xldl.dll"); //查找xldl.dll,并加载该dll 1
DownWrapper* pWapper = newDownWrapper(szDllpath);if (!pWapper->Init())   //初始化下载引擎 2
    {std::cout<<"Error, Init Failed!"<<std::endl;return 1;}std::wstringwstrUrl(argv[1]);std::wstringwstrSavePath(argv[2]);std::wstringwstrFileName(argv[3]);DownloadFile(pWapper, wstrUrl, wstrFileName, wstrSavePath);Sleep(600000);pWapper->UnInit();     //卸载下载引擎 7return 0;
}voidDownloadFile( DownWrapper* pWapper,conststd::wstring&wstrUrl,conststd::wstring&wstrFilename,conststd::wstring&wstrSavePath)
{//初始化新建任务参数
    DownTaskParampara;memcpy(para.szTaskUrl, wstrUrl.c_str(),     wstrUrl.length()*sizeof(WCHAR));std::wstringwstrRefUrl = L"";memcpy(para.szRefUrl, wstrRefUrl.c_str(),     wstrRefUrl.length()*sizeof(WCHAR));memcpy(para.szFilename, wstrFilename.c_str(), wstrFilename.length()*sizeof(WCHAR));memcpy(para.szSavePath, wstrSavePath.c_str(), wstrSavePath.length()*sizeof(WCHAR));//新建任务HANDLEhTask = pWapper->TaskCreate(para);//3std::cout<<"Create New Task"<<std::endl;if (hTask){std::cout<<"Now Start Task"<<std::endl;pWapper->TaskStart(hTask); //开始任务 4
    }else{std::cout<<"Create Task Filed!"<<std::endl;return ;}DownTaskInfoinfo;while(true){        Sleep(1000);pWapper->TaskQuery(hTask, info);    //轮询任务信息 5
std::cout<<"Size: "<<info.nTotalSize<<", Percent: "<<info.fPercent<<", Speed: "<<info.nSpeed<<std::endl;if (info.stat == TSC_COMPLETE){std::cout<<"Total File Size: "    <<info.nTotalSize<<std::endl;std::cout<<"Task Success!"<<std::endl;break;}if (info.stat == TSC_ERROR){std::cout<<"Task Failed!"<<std::endl;break;}}pWapper->TaskDelete(hTask); //删除任务,释放任务占用内存 6
}                                   

转载于:https://www.cnblogs.com/zhang-15-506/p/7800220.html

迅雷云加速开放平台学习笔记——说明相关推荐

  1. 迅雷云加速开放平台学习笔记——实现

    从示例代码的流程来看,示例文件的下载经历了以下几个步骤:初始化下载引擎(XL_Init(void))-->初始化下载参数(DownTaskParam)-->新建任务(XL_CreateTa ...

  2. 迅雷云加速开放平台接口说明文档

    迅雷云加速开放平台接口说明文档 全局接口 任务接口 接口详细说明 XL_Init BOOLXL_Init(void) XL_UnInit BOOL XL_UnInit(void) XL_CreateT ...

  3. 迅雷云加速开放平台c#demo

    迅雷云加速开放平台c#demo.很多人很遇到下载文件的问题.这个例子是调用迅雷云加速开放平台的dll,进行下载,速度很快,下载过程中可以获取到很全的下载信息,比如下载速度,进度,完成状态等. 例子中带 ...

  4. 迅雷云加速开放平台接口说明

    全局接口 接口名称 功能说明 XL_Init 初始化SDK,并使其为处理后续操作做好准备. XL_UnInit 反初始化SDK,释放模块运行期间申请的资源. XL_DelTempFile 删除临时文件 ...

  5. 云平台学习笔记(三)-实践

    一.实验目的 本实验目的: 1.熟练克隆虚拟机: 2.熟练配置域名解析 3.学会配置 Chrony: 4.学会安装 OpenStack 基础框架: 5.学会安装 Mariadb 数据库 6.熟练为虚拟 ...

  6. 迅雷云加速服务的“社会化能力”

    在今年的政府工作报告中, "互联网+"新战略为传统企业转型升级指明了方向.事实上,这也为国内互联网企业指明了未来的道路--充分利用互联网技术.核心能力在社会发展中带来更多的转型与创 ...

  7. 重大升级!灵雀云发布全栈云原生开放平台ACP 3.0

    云原生技术的发展正在改变全球软件业的格局,随着云原生技术生态体系的日趋完善,灵雀云的云原生平台也进入了成熟阶段.近日,灵雀云发布重大产品升级,推出全栈云原生开放平台ACP 3.0.作为面向企业级用户的 ...

  8. 阿里云智能开放平台团队何登成:解码云计算的 2B 服务基因 | 问底中国 IT 技术演进...

    受访者 | 何登成(花名圭多) 记者 | 胡巍巍 出品 | CSDN(ID:CSDNnews) 前阵子,笔者参加杭州云栖大会之余,一时兴起,去良渚博物院转了一圈,没错,就是国庆马云去参观的那家博物院. ...

  9. 移动云API开放平台助力开发者驰骋云端

    作者:中国移动云能力中心  --王仁喜 概要:本篇文章带你深入了解移动云API开放平台如何助力开发者驰骋云端. 初识移动云API开放平台 随着移动云业务的不断发展,用户对移动云被集成能力的要求越来越高 ...

最新文章

  1. java中8种基本类型与运算符
  2. python处理 ctrl+c
  3. boost::spirit模块实现从一个包含键/值对的容器中生成输出的测试程序
  4. java高并发(十九)死锁、spring线程安全
  5. 下载离线插件包 谷歌浏览器的方法
  6. [Python从零到壹] 三十七.图像处理基础篇之图像融合处理和ROI区域绘制
  7. csc.exe已退出,代码为-532462766
  8. android采用什么图标单位,Android支持的长度单位
  9. Module build failed (from ./node_modules/babel-loader/lib/index.js): Error: [BABEL] D:\moblie\web_co
  10. centos8共享文件夹挂载_CentOS 8 安装并配置NFS服务
  11. centos pip命令安装mysql_centos下pip安装mysql_python报错mysql_config not found
  12. Softmax回归模型的构建和实现(Fashion-MNIST图像分类)
  13. Felix: Flexible Text Editing Through Tagging and Insertion (2020-03)
  14. String写时拷贝实现
  15. 泛微云桥e-birdge之金蝶云之家集成配置手册
  16. python正负数转换_python – 将正/负数舍入到最接近的“整数”
  17. LaTeX中文字体设置
  18. 打造黑苹果(四)安装MACOS系统
  19. 括号匹配问题(栈应用)C++
  20. 【Android】你可能还不知道的elevation、以及Z值等

热门文章

  1. 启xin宝app的token算法破解——frida篇(四)
  2. doPDF——word转为PDF软件的使用方法
  3. Onvif登录海康、大华摄像机(IPC)提示权鉴失败的问题解决
  4. thinkcmf安装
  5. AWS Lambda(一)---创建一个lamda函数
  6. Android studio连接逍遥安卓模拟器
  7. 夹娃娃动画Android,手机模拟抓娃娃
  8. 应用宝苹果版_U电共享充电宝苹果版下载-U电共享充电宝APP
  9. 黑猴子的家:小白飞无人机
  10. 面对“有组织有预谋”的欺诈行为,技术大牛都祭出了哪些新技术?