客户端软件更新策略 QCryptographicHash
一、说明
互联网公司客户端软件升级通常分为:
- 普通升级 (判断条件是软件版本号)
- 增量升级
- 全量升级
- 强制升级
- 全量升级
- 灰度升级
1.根据灰度策略,命中的客户端提示升级
版本升级的判断依据是版本号及其安装包释放文件的md5值。
普通升级的判断条件是软件版本号,强制升级的判断条件是软件基础版本号,或者当有大版本更新或者软件构建框架升级。
增量升级只下载替换md5变化的文件
全量升级重写下载安装包,走安装流程
二、文件md5获取
#ifndef FILEMD5INSTANCE_H
#define FILEMD5INSTANCE_H#include <QObject>
#include <QMutex>
#include <QDir>
#include <QCryptographicHash>
#include <QFile>
#include <QDebug>
class FileMd5Instance : public QObject
{Q_OBJECT
public:explicit FileMd5Instance();~FileMd5Instance();static FileMd5Instance* instance();void fileMd5(const QDir &dir);void bigFileMd5(const QDir &dir);private:static QMutex *m_pmutex;static FileMd5Instance *m_pinstacne;
};#endif // FILEMD5INSTANCE_H
#include "filemd5instance.h"
QMutex *FileMd5Instance::m_pmutex = new QMutex;
FileMd5Instance *FileMd5Instance::m_pinstacne = nullptr;
FileMd5Instance::FileMd5Instance()
{}FileMd5Instance::~FileMd5Instance()
{}FileMd5Instance *FileMd5Instance::instance()
{if(nullptr == m_pinstacne){m_pmutex->lock();if(nullptr == m_pinstacne){m_pinstacne = new FileMd5Instance;}m_pmutex->unlock();}return m_pinstacne;
}void FileMd5Instance::fileMd5(const QDir &dir)
{QStringList fileList = dir.entryList(QDir::Files, QDir::NoSort);for(int i=0;i<fileList.size();i++){QFile file(dir.path()+"/"+fileList.value(i));file.open(QIODevice::ReadOnly);QByteArray ba = QCryptographicHash::hash(file.readAll(), QCryptographicHash::Md5);file.close();qDebug()<<"fileMd5 file: "<<fileList.value(i)<<" MD5:"<< ba.toHex().constData();}
}void FileMd5Instance::bigFileMd5(const QDir &dir)
{QStringList fileList = dir.entryList(QDir::Files, QDir::NoSort);for(int i=0;i<fileList.size();i++){QFile file(dir.path()+"/"+fileList.value(i));file.open(QIODevice::ReadOnly);QCryptographicHash md5(QCryptographicHash::Md5);qint64 totalBytes = 0;qint64 bytesWritten = 0;qint64 bytesToWrite = 0;qint64 loadSize = 1024 * 4;QByteArray buf;totalBytes = file.size();bytesToWrite = totalBytes;while (1){if(bytesToWrite > 0){buf = file.read(qMin(bytesToWrite, loadSize));md5.addData(buf);bytesWritten += buf.length();bytesToWrite -= buf.length();buf.resize(0);}else{break;}if(bytesWritten == totalBytes)break;}file.close();qDebug()<<"bigFileMd5 file: "<<fileList.value(i)<<" MD5:"<< md5.result().toHex().constData();}
}
三、效果图
客户端软件更新策略 QCryptographicHash相关推荐
- 客户端软件更新管理系统
名称: 客户端软件更新管理系统 摘要: 本发明提供了一种客户端软件更新管理系统,包括设于服务器端的服务端管理模块.设于客户端的客户端更新模块及客户端执行模块.在服务器端与客户端建立连接的服务端接口模块 ...
- mac word维吾尔文字体_字加软件更新啦!万款字体一键激活!
[字加]客户端软件更新啦! 目前MAC版本和WIN版本[字加]都已更新.Mac OS客户端V0.9.9.13,Windows客户端V0.9.9.4. [字加]客户端软件是为设计师量身定做的一款字体获取 ...
- 攻击者正在利用mysql程序漏洞_Riddle 漏洞影响 MySQL 客户端软件,MiTM 攻击可致登陆凭证被窃...
据外媒 15 日报道,安全专家于 2 月在 Oracle 数据库管理系统( DBMS )MySQL 中发现一个被命名为 Riddle 的编码漏洞,允许攻击者利用 MiTM 攻击窃取用户名与密码.目前, ...
- wsus服务器推送指定的补丁,【补丁更新】组策略实现WSUS客户端自动更新
使用组策略来管理 WSUS 自动更新客户端下载.安装和重新启动行为 可以配置 Windows Server Update Services (WSUS) 客户端来提供最符合您的环境和业务需求的更新安装 ...
- WPF学习开发客户端软件-任务助手(下 2015年2月4日代码更新)
时光如梭,距离第一次写的 WPF学习开发客户端软件-任务助手(已上传源码) 已有三个多月,期间我断断续续地对该项目做了优化.完善等等工作,现在重新向大家介绍一下,希望各位可以使用,本软件以实用性为主 ...
- 软件更新服务之客户端更新
软件更新服务之客户端更新 在现在的软件开发和使用中,软件的更新是很关键的一环.通过不停的更新软件,迭代,给用户带来更好的体验和更多的功能以及修复用户反馈的bug.我们在更新的软件的时候,如果每次都要用 ...
- 计算机更新策略,客户端无法更新组策略
你好,客户端windows 7,服务器windows server 2008.该域部署了多个站点,某些站点部署的是只读域控制器. 客户反馈客户端无法更新组策略,执行gpupdate /force,报错 ...
- 软件更新点的配置—SUP
软件更新点 (SUP) 正如我在上文中提到的,SCCM 中已经不存在目录了.SCCM 改为直接使用专用 Windows Server® Update Services (WSUS) 服务器,该服务器将 ...
- 使用Configuration Manager部署及管理软件更新(2)
承接上一篇文章:http://ericxuting.blog.51cto.com/8995534/1543835 一. 确定软件更新符合性 1. 打开Configuration Manager管理控制 ...
最新文章
- 图灵奖公布:高性能计算先驱、为超算铺平道路的Jack Dongarra获奖
- 由于授权协议中的一个错误,远程计算机中断了会话
- 转载:2016前端开发技术巡礼
- WCF创建到使用到发布
- Boost:bind绑定的测试自定义占位符
- 在ADF 12.2.1.3中使用基于JSON的REST Web服务
- 数据结构c语言版总结,数据结构:C语言常见算法总结
- 前端学习(171):注释元素
- 微信壹佰超级名片小程序源码v1.1.16
- Spring自学日志06(Aop)
- 【Elasticsearch】一次 排查 iK 分词器 查询慢 分词多 内容大 的问题记录
- 想知道你能不能挣到大钱吗?
- php微积分难吗,微积分中10大经典问题
- 扩展欧几里得算法求逆元c语言,扩展欧几里得算法及求逆元
- Python读取pdf无框线表格_Python将PDF数据解析为表格形式
- Android 校正系统时间的三种解决方案
- python tokenize_model_AttributeError:“module”对象没有属性“tokenize”
- 让人心静的七十五条经典修心格言
- 【JZOJ A组】Melancholy
- 分享一些ABP..ABS的广告过滤规则