迅雷漫画下载工具II 故障日志09.04.12
2009-04-12 22:46 Kaedei 阅读(465) 评论(1) 编辑 收藏 举报博客上很多的同学都来反映说是程序一打开就自动停止工作,经过分析发现程序出错很有可能发生在自动更新的过程中。
于是趁着返回学校前的十几分钟,决定抓虫试试。
根据网友们的反映,前几天尚未出现故障,说明软件本身可能出错的几率较小。于是研究目标一下就转到了新浪上……=-=
先来说一下迅雷漫画下载工具II自动更新的工作原理吧
(本程序是我初学VB.NET写的第一个程序……从第一版缝缝补补到现在,连我都不忍心看那些惨不忍睹的代码了……
如果贴出了一些不成熟源码,大家将就看吧=-=千万不要打击我)
1.我把新版本上传到某一外链空间中
2.把新版本的相关信息按照相应格式发到某一篇博文中:
这个博文的地址:http://blog.sina.com.cn/s/blog_58c506600100c37y.html
自动更新数据的格式:
#Region "版本更新格式说明" '版本更新格式 '以十个 # 开始,十个 ~ 结束 '每部分间以"|"作为分隔符 '【0】版本(5位数,转换为Int64):81226 '【1】此版本名称:迅雷漫画下载工具II '【2】更新信息:啊啊啊啊$啊啊啊啊啊$啊啊啊啊啊啊$啊啊啊啊 以美元符号($)作为换行符 '【3】下载地址:http://www.xxxxxxxxxxxxxx.com/xxxxxx/xxxxx/xx/xxxxxxx/xxx.exe '【4】重要性:0-普通 1-推荐更新(修复了已知Bug) 2-强烈推荐(添加了软件功能) 3-修补了安全漏洞 '【5】发布日期:2009年1月1日 #End Region
3.程序在启动时会取得上面文章的源代码,然后对源代码进行分析,并且与当前的版本进行对比后进行相应的提示(是否有新版本)
4.具体的取得方式为:
取得源代码后程序查询字符串”##########”和”~~~~~~~~~~”在文章中的位置,根据定义,这两个字符串分别表示了数据段的起始和结束位置
'开始标记 Private StartSign As String = "##########" '结束标记 Private EndSign As String = "~~~~~~~~~~"
If html1.IndexOf(StartSign) >= 0 Then Dim codeStart As Integer = html1.IndexOf(StartSign) + StartSign.Length Dim codeEnd As Integer = html1.IndexOf(EndSign) Dim code As String = html1.Substring(codeStart, codeEnd - codeStart)
然后使用Split()函数将各个信息分开
'保存原始数据的数组 Private updateInfo() As String
updateInfo = code.Split("|"c) '版本号 newVersion = CLng(updateInfo(0)) '名称 newVersionName = updateInfo(1) '版本描述 newVersionDescribe = "当前最新版本:" & updateInfo(0) & ControlChars.CrLf & _ "发布日期:" & updateInfo(5) & vbCrLf & vbCrLf & updateInfo(2) newVersionDescribe = newVersionDescribe.Replace("$", ControlChars.CrLf) '下载地址 newVersionDownloadURL = updateInfo(3) '重要性 newVersionImportant = CInt(updateInfo(4)) If newVersion > currentVersion Then Return 1 Else Return 0 End If
最后显示出来
本次的更新错误出现在了文章源代码分析上
背景:新浪大概在4月10号左右更新了博文的源代码构成方式,在源代码中新增了<meta>内容以更好地利用搜索引擎提取文章信息
相关HTML源码如下:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
<meta name="description" content="Kaedei,坏天气,——————————迅雷漫画下载工具Ⅱ更新数据用————————————————————" />
<meta name="keywords" content="Kaedei,坏天气,杂谈" />
可以看出,导致问题的正是Meta中的name属性,因为name=”description”多此一举地将文章的部分内容显示在了HTML的<head>之后(也就是比较靠前的位置),导致第一个”##########”提早出现。
所以程序截取的字符串就是一大堆无用的字符了,然后在类型转换的时候导致了异常产生(此段代码也因为疏忽没有加上Try……Catch),而又因为程序默认开启了自动更新,所以在程序刚一开始的时候就会出现错误,导致停止工作。
我已经修复了这个错误,现在可以正常使用了
以上~
感谢以下网友的反馈:
vita
还有几位匿名的朋友
再次表示感谢!