一 QQ GUI Style
GUI框架上是采用了和QQ、QQMusic同一套的令人羡慕的对小公司可望不可及的如图 框架支持换肤、换色、换底纹、自定义底纹图片等。GUI框架用LayerWnd搭建的一套企业级皮肤框架,这也是本人想去搭建试试的,因为它与其他最大的区别就是不需要接受WM_PAINT消息,当form上的控件元素有改变的时候可以直接调用UpdateLayeredWindow刷新控件状态样式,所以需要找一个方式来驱动层窗口的刷新(这里就不展开了),下图
GUI 整个界面就一个窗口句柄(除界面内嵌入IE浏览器之外),其它都是通过TXGuiFoundation框架裁剪窗口控件元素之后,各个控件元素负责自己在窗口上的绘制。
二 基于插件平台的框架设计
1.目录结构分析:在安装目录下总共有子目录: 放的当然是应用程序相关的文件dll、exe、configdata等; 放的是app widgets相关的一些信息包括:类型信息、logo图标下载地址、插件安装包的下载地址、文本信息、版本信息、以及插件本身是否下载禁用等信息。
2.插件目录分析:在其中有个目录Plugins,存放的是对应到电脑管家工具箱的一个个app widgets,整个界面的展现通过PluginInfo.xml来管理包括:分类信息、app widget本身的信息、文本信息等。 这里有点做法与我之前经验不一样的是,这里会事先对每一个未被用户下载的的插件先创建目录并且存放一些插件必须的依赖库,如下图:
等。
3.插件安装流程:以“文件粉碎”为例,从PluginInfo.xml读取到下载的url之后下载QMSystemSetup_7.2.8072.210.exe到PluginsSetupBak下开始静默安装,安装位置在7.3.8102.213\plugins\FileSmash\下,安装文件主要是两个1 QQPCSmashFile.exe 2 FileSmash.dll,这两个文件1主要是和文件粉碎相关的应用,2主要是和插件框架交互的模块,通过exeScope工具分析,这个设计思想应该是基于COM的(我想这就是这个职位需要理解com的地方吧),如下图:
这里面有个 、 目录,也是利用插件框架做的,但是我分析不出它们的作用。
三 进程分析
电脑管家整个平台是基于一个个app widget(都是一个个进程,甚至配置程序QQPConfig.exe都是个进程),所以要设计这么一套框架必须要解决进程间通信IPC的技术问题,不知道是利用windows 哪种IPC技术做到数据共享的,记得曾经看过腾讯的Q+产品的IPC设计(http://blog.163.com/xiaolonghong123123@126/blog/static/94939062201301111027597/),是利用windows的FileMapping设计的一个高性能可复用的IPC,很赞。Chrome的IPC也很值得学习研究~~
通过procexp.exe工具分析,整个电脑管家平台由QQPCRTP.exe为所有application的父进程(守护进程),如图
感觉整个电脑管家占用的工作者线程资源比较多,QQPCTray.exe将近77个线程,如图
四 其他
1 软件管家分析
在 目中有一个data目录,里面的Catalog.xml来管理描述信息,这里的数据都是加密过的二进制数据,难以下手分析,不过对于软件信息管理这块应该不复杂。主要是安装应用软件的时候如何确保安全,是否有木马注入之类的如何实现,才是一个软件管家的核心。
2 用户dump分析
很容易找到处理用户dump的必须是这个小虫虫 ,我以前的经验做法是SetUnhandledExceptionFilter()+ MiniDumpWriteDump(),该用法只能捕捉到用户态的一些系统异常,对于内核态或者一些crt的是捕捉不到的。
3 产品自动升级
1.流程分析:下载更新安装包,然后QQPCMgrUpdate.exe通过静默安装的方式启动更新安装包,安装最新的版本成功之后,再卸载之前的版本,两个版本的内容分别存在以版本号为名称的目录下。
2.静默安装:貌似之前的版本卸载不干净,当然这个对用户也可以接受,因为有些dll、或者exe被系统或者其他程序占用着,不过我建议这些文件是否可以再用户重新启动计算机之后删除掉呢?(确实已经删除,呵呵,在用户的硬盘尽量少留垃圾文件)
4 APPData目录下配置数据分析
存放都是一些公用性的数据,比如天气数据、UID、Download临时文件等。最后和整个腾讯平台的相关的数据C:\ProgramData\下,比如同一个账号可以各处通用腾讯的各种产品。
产品体验上:
1 安装:由于本身产品的安装比较大,所以采用了一个只有1M多的下载器来帮助用户下载安装程序,这也是目前大部分本省比较大的产品的做法,比如chrome、游戏等。
2 安装工具:自己开发了一套体验较好的安装程序,这也是各大互联网公司普遍趋势做法,可以说是站在用户的角度为用户想到了操作的每一步。但是卸载貌似没有自己开发,是用了开源的NSIS来做的。
3 当一个非模态的子窗口在父窗口之前时(比如更新下载窗口),这个时候用户把焦点回到父窗口,我觉得这个时候子窗口应该在Z-ORDER的下面。
4 QQ电脑管家对于360安全卫士来说应该是个起步晚的产品,所以反馈这块我觉得应该做得更加的方便些,最好直接在客户端上跳出反馈窗口,而不是像现在这样弹出一张网页了事。
5 窗口地下两个圆角上的切图是否可以更精细点呢?如图:
6 为啥我从官网上刚下的版本,当我去打开自动更新界面时,却要我更新呢?是不是官网上的版本和最新的版本已经不一致了呢?还是CDN缓存或者其他原因导致?
7 工具箱里面是否可以有一个已安装工具的tab panel呢?
原文地址:http://www.cnblogs.com/kuiadao/p/3735109.html