在线升级服务的设计与实现毕业论文.doc_第1页
在线升级服务的设计与实现毕业论文.doc_第2页
在线升级服务的设计与实现毕业论文.doc_第3页
在线升级服务的设计与实现毕业论文.doc_第4页
在线升级服务的设计与实现毕业论文.doc_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

成都大学专科毕业论文 设计 I 在线升级服务的设计与实现毕业论文在线升级服务的设计与实现毕业论文 目录 第 1 章 在线升级模块的概述 1 1 1 开发工具 1 1 1 1 Microsoft Visual Studio 2008 C 1 1 1 2 软件架构体系 C S 概述以及 C S 和 B S 结构分析比较 1 第 2 章系统可行性分析 2 2 1 需求分析 2 2 1 1 功能需求 2 2 2 可行性分析 2 2 2 1 技术可行性 2 2 2 3 管理可行性 2 2 2 4 开发环境可行性 2 第 3 章 在线升级模块总体设计说明 3 3 1 升级模块设计环境 3 3 2 总体结构设计思路 3 3 2 1 体系结构设计 3 3 2 2 系统流程分析 3 3 3 系统模块核心技术 4 3 3 1 登陆 FTP 服务器 4 3 3 2 向 FTP 服务器发送命 5 3 3 3 调用系统 API 7 3 3 4 XML 的文件操作 8 3 3 5 INI 文件的读写 10 3 3 6 动态生成版本版面 11 3 3 6 使用哈希表记录版本号及更新信息 12 3 4 界面设计 13 3 4 1 服务器端界面设计 13 3 4 2 客户端界面设计 14 第 4 章 模块详细设计说明 16 4 1 类库的设计过程 16 4 1 1 类库的设计过程 16 4 2 服务器端设计过程 28 4 2 1 连接 FTP 服务器 28 4 2 2 向 FTP 服务器上新传新版本 30 4 2 3 获取本地磁盘 34 4 3 客户端设计过程 35 4 3 1 启动客户端时检测是否有新版本 35 II 4 3 2 从 FTP 服务器下载指定版本 35 4 3 3 定时升级设置的设计 37 4 3 4 计时器实现 38 第 5 章系统的测试 39 总结 40 致 谢 41 参考文献 42 1 第 1 章 在线升级模块的概述 1 1 开发工具 1 1 1 Microsoft Visual Studio 2008 C Microsoft Visual Studio 2008 是面向 Windows Vista Office 2007 Web 2 0 的下一 代开发工具 代号 Orcas 是对 Visual Studio2008 一次及时 全面的升级 VS2008 引入了 250 多个新特性 整合了对象 关系型数据 XML 的访问方式 语言更加简洁 使用 Visual Studio 2008 可以高效开发 Windows 应用 设计器中可以实时反映变更 XAML 中智能感知功能 可以提高开发效率 同时 Visual Studio 2008 支持项目模板 调试器和部署程序 Visual Studio 2008 可以高效开发 Web 应用 集成了 ASP NET AJAX 1 0 包含 ASP NET AJAX 项目模 板 它还可以高效开发 Office 应用和 Mobile 应用 目前 开发和运行 C 程序有多种选择 用户可以从微软公司官方网站上下载 NET 的软件 开发工具箱 SDK 或购买功能强大的 Visual Studio NET 开发环境 其各自的特点如下 SDK 包含了编译 运行和测试 C 程序的所有资源 具体是 C 语言编译器 JIT 编译器和相关 文档 唯一不包含的是用来输入和编辑 C 程序的文本编译器 Visual Studio NET 是微软公 司推出的完整开发环境 它包含一个集成开发环境 IDE 和高级 C 编辑器 同时还支持程 序调试及许多可提高开发人员效率的附加功能 1 1 2 软件架构体系 C S 概述以及 C S 和 B S 结构分析比较 在网络连接模式中 C S 结构即 Client Server 客户机 服务器网 在客户机 服务器 网络中 服务器是网络的核心 而客户机是网络的基础 客户机依靠服务器获得所需要的 网络资源 而服务器为客户机提供网络必须的资源 这里客户和服务器都是指通信中所涉及的两个应用进程 软件 使用计算机的人 是计算机的 用户 user 而不是 客户 client 但在许多国外文献中 也经常把运行 客户程序的机器称为 client 这种情况下也可把 client 译为 客户机 把运行服务器程 序的机器称为 server 它是软件系统体系结构 通过它可以充分利用两端硬件环境的优势 将任务合理分配 到 Client 端和 Server 端来实现 降低了系统的通讯开销 目前大多数应用软件系统都 是 Client Server 形式的两层结构 由于现在的软件应用系统正在向分布式的Web 应 用发展 Web 和 Client Server 应用都可以进行同样的业务处理 应用不同的模块共享 逻辑组件 因此 内部的和外部的用户都可以访问新的和现有的应用系统 通过现有应用 系统中的逻辑可以扩展出新的应用系统 这也就是目前应用系统的发展方向 C S 结构在技术上很成熟 它的主要特点是交互性强 具有安全的存取模式 网络通信 量低 响应速度快 利于处理大量数据 但是该结构的程序是针对性开发 变更不够灵活 维护和管理的难度较大 通常只限于小型局域网 不利于扩展 并且 由于该结构的每台客 户机都需要安装响应的客户端程序 分布功能弱且兼容性差 不能实现快速部署安装和配置 因此缺少通用性 具有较大的局限性 这种结构还要求具有一定专业水准的技术人员去完成 SQL 请求 图 1 1 C S 结构图 客户机 服务器 数据库 管理系统 2 第 2 章系统可行性分析 2 1 需求分析 2 1 1 功能需求 在线升级模块是为了解决一个基于 C S 结构的应用程序客户端部署和自动升级难的问题 做所周知 用户一直都在为是用 C S 结构的程序可维护性差 布置困难 升级不方便以及维 护成本高等问题而头疼 因为 开发一个适合用户 合理方便的解决用户在使用过程中能够 每当有新版本程序发布时 能自动升级的程序模块是相当有必要的 经分析 该模块需要在 服务器端实现连接 FTP 服务器 显示本地目录和服务器目录 载入版本信息 向 FTP 服务器 上传新版本的功能 在客户端实现检测有无新版本 显示升级版本的详细信息 点击下载 下载时候显示进度条 定时升级设置等功能 从最基础的来看 也就是对 XML 文件的操作 设计类库来编写服务器端和客户端公共使用的方法 2 2 可行性分析 2 2 1 技术可行性 随着国内软件开发的日益发展壮大 各种中小企事业单位已具备独立开发各种类型的软 件的能力 能够满足不同行业的特别的需求 但是就整个系统的技术构成上来看 它还是属 于面向对象的编程 单位不同分支机构对软件的使用 开发都具有一定的基础水平 2 2 3 管理可行性 随着时代的发展 人员素质己逐步提高 不论是对于电脑系统的基本操作还是对于系统 的维护都有了一定的基础 同时还可以配置专业的电脑维护人员来维护电脑 不必担心电脑 故障问题 2 2 4 开发环境可行性 我们采用 Microsoft Visual Studio 2008 开发工具 它具有可视化的开发环境 使代码的 编写更为直观 并且在可视化环境下的调试和维护也相对容易 Microsoft Visual Studio 2008 集程序的代码编辑 编译 连接和调试等功能于一体 给编程人员提供了一个完整方便 的开发界面和许多有效的辅助开发工具 成都大学专科毕业论文 设计 3 第第 3 3 章章 在线升级模块总体设计说明在线升级模块总体设计说明 3 1 升级模块设计环境 3 1 1 软件环境 Microsoft Windows XP Professional Microsoft Visual Studio 2008 C Sharp 3 1 2 硬件环境 赛扬 400 以上 256M 以上内存 配备鼠标 键盘 800 600 彩色显示器 3 2 总体结构设计思路 本在线升级模块在设计阶段主要考虑C S结构的优势和特点 尽量避免其缺点 完成了一 些技术要求 并根据系统分析阶段对系统的逻辑功能的要求 同时加以考虑技术和运行环境 等方面的条件 确定了系统的总体结构和系统各组成部分的技术方案 最后合理选择计算机 和通信的软 硬件设备 提出系统的实施计划 确保总体目标的实现 3 2 1 体系结构设计 根据需求分析中的用户特定需求 在线升级模块主要实现软件的实时升级功能 该模块 分为服务器端和客户端两部分 其主要功能如下 服务器端 在上传升级文件时 将版本信息写入FTP服务器上的XML文件中 客户端 启动时检测是否有新版本 使用HashTable 哈希表 以键 值对的形式记录要升级的版本号及版本升级信息 定时升级及设置 多版本升级 显示要升级版本的详细信息 从FTP服务器下载升级文件 下载升级文件时显示进度条 将升级的版本信息写入本地XML文件中 升级文件下载完毕后自动安装 3 2 2 系统流程分析 上传升级文件 同时将文件 版本信息写入服务器端的XML版本文件中 使用 用户 服务器 4 调用类库中的方法 调用类库中的方法 访问服务器端 从服务器端下载升级文件到客户端 同时将版本信息写入XML更新文件中 图3 1 系统流程图 3 3 系统模块核心技术 3 3 1 登陆 FTP 服务器 如果想登录 FTP 服务器 首先要验证登录用户名和密码是否正确 主要是通过 FtpWebRequest 类实现的 FtpWebRequest 类是实现文件传输协议 FTP 客户端 FtpWebRequest 类提供了以编程方式与 FTP 服务器相互的功能 1 Credentials 属性 该属性用于与 FTP 服务器通信的凭据 语法 Public override ICredentials Credentials get set 属性值 ICredentials 实例 如果还未设置该属性 则为空引用 2 Method 属性 用于设置要发送到 FTP 服务器的命令 语法 Public override string Method get set 属性值 String 值 包含要发送到服务器的 FTP 命令 在本模块中 通过这两个属性设置 FTP 的登录信息 如果没有发生异常 说明登录的用 户名和密码是正确的 其中 FTPServerIP 为 FTP 服务器地址 FtpUserName 为 登录 FTP 用 户名 FtpUserPwd 为登录 FTP 密码 而 Bool 类型 如果为 true 表示登录用户合法 否则 表示不合法 当输入主机地址 用户名和密码后 会将这 3 个变量作为参数传递给 CheckFtp 方法 来 判断登录用户是否合法 程序首先根据主机地址实例化一个 FtpWebRequest 对象 然后根据 用户名和密码设置 FTP 登录信息 最后发送一个获取文件列表的命令请求 如果响应了这个 请求 则说明登录用户名和密码正确 代码如下 FtpWebRequest reqFTP 声明FtpWebRequest变量 验证登录用户是否合法 public bool CheckFtp string FTPServerIP string FtpUserName string FtpUserPwd bool ResultValue true try 服务端 端 客户 端 类库 成都大学专科毕业论文 设计 5 FtpWebRequest ftprequest FtpWebRequest WebRequest Create ftp FTPServerIP 创建FtpWebRequest对象 ftprequest Credentials new NetworkCredential FtpUserName tpUserPwd 设置FTP登录信息 ftprequest Method WebRequestMethods Ftp ListDirectory 发送一个请求命令 FtpWebResponse ftpResponse FtpWebResponse ftprequest GetResponse 响应一个请求 ftpResponse Close 关闭请求 catch ResultValue false return ResultValue 3 3 2 向 FTP 服务器发送命 WebRequestMethods Ftp 类表示可与 FTP 请求一起使用的 FTP 协议方法的类型 此类的 成员可用于设置 Method 属性 该属性确定要用于执行请求的操作 如上传和下载文件 的协 议方法 通过 WebRequestMethods Ftp 类的成员可以像 FTP 服务器发送各命令 WebRequestMethods Ftp 类的成员及说明如下图 1 DownloadFile 方法 表示要用于从 FTP 服务器下载文件的 FTP PETR 协议方法 语法 public const string DownloadFile 模块中通过 WebRequestMethods Ftp 类 DownloadFile 成员设置 FTPWebRequest 类的 Method 属性实现下载 FTP 服务器中的文件 其中 Bool 类型 如果为 ture 则下载成功 否 则下载失败 代码如下 public bool Download string filePath string fileName string ftpServerIP string ftpUserID string ftpPassword string path bool check true FtpWebRequest reqFTP string uri uri ftp ftpServerIP path fileName try 实例化FileStream对象 FileStream outputStream new FileStream filePath fileName FileMode OpenOrCreate FileAccess ReadWrite FileShare None reqFTP FtpWebRequest FtpWebRequest Create new Uri uri reqFTP Method WebRequestMethods Ftp DownloadFile 使用DownloadFile成员下载 6 reqFTP UseBinary true reqFTP Credentials new NetworkCredential ftpUserID ftpPassword FtpWebResponse response FtpWebResponse reqFTP GetResponse Stream ftpStream response GetResponseStream long cl response ContentLength int bufferSize 2048 int readCount byte buffer new byte bufferSize readCount ftpStream Read buffer 0 bufferSize while readCount 0 循环读取文件 outputStream Write buffer 0 readCount readCount ftpStream Read buffer 0 bufferSize ftpStream Close outputStream Close response Close catch check false return check 2 ListDirectory 方法 表示获取 FTP 服务器上的文件的简短列表的 FTP NLIST 协议方法 语法 Public const string ListDirectory 本模块中通过 WebRequestMethods Ftp 类的 ListDrirectory 成员设置 WebRequest 类的 Method 属性实现获取 FTP 服务器中的文件列表 代码如下 public string GetFTPList string ftpServerIP string ftpUserID string ftpPassword string path 指定路径的文件列表 if path null path string downloadFiles StringBuilder result new StringBuilder FtpWebRequest reqFTP try reqFTP FtpWebRequest FtpWebRequest Create new Uri ftp ftpServerIP path Remove path LastIndexOf 成都大学专科毕业论文 设计 7 reqFTP UseBinary true reqFTP Credentials new NetworkCredential ftpUserID ftpPassword reqFTP Method WebRequestMethods Ftp ListDirectoryDetails WebResponse response reqFTP GetResponse StreamReader reader new StreamReader response GetResponseStream Encoding GetEncoding GB2312 string line reader ReadLine while line null result Append line result Append n line reader ReadLine result Remove result ToString LastIndexOf n 1 reader Close response Close return result ToString Split n catch downloadFiles null return downloadFiles 3 3 3 调用系统 API 本模块需要调用系统API API作为Windows操作系统一部分的动态链接库 DLL 当难以 自己编写等效的过程时 可以使用它们来执行任务 由于DLL都属于非托管动态链接库 那么 要调用非托管动态链接库DLL需要使用DllImport属性 DllImport属性只是该属性化方法由非 托管动态链接库DLL作为静态入口公开 并提供对从非托管DLL导出的函数进行调用时所必需 的信息 作为最低要求 必需提供包含入口点的DLL的名称 在使用DllImport属性前 需要引用命名空间 System Runtime InteropServices 本模块涉及的代码如下 public class Win32 public const uint SHGFI ICON 0 x100 public const uint SHGFI LARGEICON 0 x0 大图标 public const uint SHGFI SMALLICON 0 x1 小图标 DllImport shell32 dll EntryPoint ExtractIcon public static extern int ExtractIcon IntPtr hInst string lpFileName int 8 nIndex DllImport shell32 dll EntryPoint SHGetFileInfo public static extern IntPtr SHGetFileInfo string pszPath uint dwFileAttribute ref SHFILEINFO psfi uint cbSizeFileInfo uint Flags DllImport User32 dll EntryPoint DestroyIcon public static extern int DestroyIcon IntPtr hIcon DllImport shell32 dll public static extern uint ExtractIconEx string lpszFile int nIconIndex int phiconLarge int phiconSmall uint nIcons StructLayout LayoutKind Sequential public struct SHFILEINFO public IntPtr hIcon public IntPtr iIcon public uint dwAttributes MarshalAs UnmanagedType ByValTStr SizeConst 260 public string szDisplayName MarshalAs UnmanagedType ByValTStr SizeConst 80 public string szTypeName 3 3 4 XML 的文件操作 我们都知道 在升级文件时 我们需要读取本地软件版本号 然后与服务器上的版本号 进行对比 而在线升级模块中的然间升级列表是存放在XML文件中 所以需要在C 中对XML文 件进行操作 以确定是否有新的版本可供升级 对XML文件进行操作时 需要用到System Xml命名空间下的类 System Xml命名空间为处 理XML提供基于标准的支持 一些标准结构 表 3 1 System Xml 命名空间中的类及说明 类说明 XmlDocument 表示 XML 文档 XmlElement 表示一个元素 XmlNode 表示 XML 文档中的单个节点 XmlNodeList 表示排序的节点集合 1 XmlDocument类 XmlDocument类表示一个XML文档 其常用属性 方法及说明如下表 表 3 2 XmlDocument 类常用属性 方法及说明 属性或方法说明 ChildNodes 属性获取节点的所有子节点 DocumentElement 属性获取文档的根 XmlElement InnerText 属性获取或设置节点及其所有子节点的串联值 成都大学专科毕业论文 设计 9 Value 属性获取或设置节点值 AppendChild 方法将指定的节点添加到该节点的子节点列表的末尾 CreateElement 方法创建 XmlElement CreateNode 方法创建 XmlNode GetElementByld 方法 Save 方法 获取具有指定 ID 的 XmlElement Save 方法将 XML 文档保存到指定的位置 SelectSingleNode 方法选择匹配 Xpath 表达式的第一个 XmlNode 2 XmlElement类 XmlElement类表示一个XML文档 其常用属性 方法及说明如下表 表 3 3 XmlElement 类常用属性 方法及说明 属性或方法说明 ChildNodes 属性获取节点的所有子节点 FirstChild 属性获取节点的第一个子级 InnerText 属性获取或设置节点及其所有子级的串联值 Name 属性获取节点的限定名 Value 方法获取或设置节点的值 AppendChild 方法将指定的节点添加到该节点的子节点列表的末尾 3 XmlNode类 XmlNode类表示公开事件并可绑定到数据的单个XMLNode对象 其常用属性 方法及说明 如下表 表 3 4 XmlNode 类常用属性 方法及说明 属性或方法说明 ChildNodes 属性获取一个 XMLNodes 集合 该集合表示 XMLNode 控件的子元素 FirstChild 属性湖区一个 XMLNode 对象 该对象表示 XMLNode 控件中的第一个子节 点 NodeText 属性获取或设置 XMLNode 控件的文本值 NodeValue 属性获取或设置表示属性的 XMLNode 的值 Copy 方法将 XMLNode 控件的内容复制到剪贴板 Text 属性获取或设置 XMLNOde 控件的无格式纯文本 Load 方法使用来自指定 XML 文件的数据更新 XMLNode 控件 SelectNodes 方法 获取一个 XMLNodes 集合 该集合表示与 XPath 参数匹配的所有节点 现在 XMLNode SelectSingleNode 方法 获取一个 XMLNode 对象 该对象表示 XMLNode 控件中与 Xpath 参数 匹配的第一个子节点 4 XmlNodeList类 10 XmlNodeList类表示排序的节点集合 其常用属性及说明如表 表 3 5 XmlNode 类常用属性 方法及说明 属性或方法说明 GetEnumerator在中节点集合上提供的一个简单的 foreach 样式迭代 Item检查给定索引处的节点 3 3 5 INI 文件的读写 虽然微软早已经建议在 WINDOWS 中用注册表代替 INI 文件 但是在实际应用中 INI 文 件仍然有用武之地 尤其现在绿色软件的流行 越来越多的程序将自己的一些配置信息保存 到了 INI 文件中 INI 文件是 Windows 的系统配置文件 它保存了软件配置的一些信息 其 大小最好不超过 64KB 在 C 应用程序中使用 INI 文件可以通过调用 API 函数 GetPrivateProfileString 来实现 首先需要在命名空间区域添加 System Runtime InteropServices 该函数声明如下 region 为INI文件中指定的节点取得字符串 为INI文件中指定的节点取得字符串 欲在其中查找关键字的节点名称 欲获取的项名 指定的项没有找到时返回的默认值 指定一个字串缓冲区 长度至少为 nSize 指定装载到lpReturnedString缓冲区的最大字符数量 INI文件名 复制到lpReturnedString缓冲区的字节数量 其中不包括那些NULL中 止字符 DllImport kernel32 public static extern int GetPrivateProfileString string lpAppName string lpKeyName string lpDefault StringBuilder lpReturnedString int nSize string lpFileName endregion 在此 涉及到修改 INI 配置文件中的内容 所以需要用到 API 函数 WritePrivateProfileString 这样便可以写入想要的新字符串了 成都大学专科毕业论文 设计 11 其声明如下 region 修改INI文件中内容 修改INI文件中内容 欲在其中写入的节点名称 欲设置的项名 要写入的新字符串 INI文件名 非零表示成功 零表示失败 DllImport kernel32 public static extern int WritePrivateProfileString string lpApplicationName string lpKeyName string lpString string lpFileName endregion 同时需要读取 INI 配置文件中的指定节点内容 则需要用到函数 ReadString 方法用来从 INIpeizhi 文件中读取指定节点的内容 并转换为字符串进行输出 起返回 值类型为 String 类型 表示读取的节点内容 该方法由 4 个参数 分别表示 INI 配置文件节 点 节点下的项 找不到内容时返回值要和读取的 INI 配置文件 其方法实现代码如下 region 从INI文件中读取指定节点的内容 从INI文件中读取指定节点的内容 INI节点 节点下的项 没有找到内容时返回的默认值 要读取的INI文件 读取的节点内容 public string ReadString string section string key string def string fileName StringBuilder temp new StringBuilder 1024 GetPrivateProfileString section key def temp 1024 fileName return temp ToString endregion 3 3 6 动态生成版本版面 在需求分析之后 我们发现如果软件的设计能够支持多个版本升级的实际需要的话是最 好的 故此在线升级模块需要能够支持多版本升级 因此在版本信息窗体中就需要根据服 务器上的版本信息自动添加版本面板 以便下载多个版本 12 TabControl控件能够实现版本面板 其实现的原理可以归结为 首先 Ftp服务器 上已经存在版本信息 其检测到服务器上的版本信息 随后 与本地计算机当前拥有的版 本进行比较 检测结果 如果服务器上的版本号比本地计算机当前拥有的版本号高 则 TabControl控件中添加一个TabPage面板 依次循环即可 在线升级模块中动态生成版本面板的实现代码如下 根据服务器端的可更新版本自动添加版本面板 并显示更新的信息 private void frmUpdate Load object sender EventArgs e if frmMain list Count 0 for int i 0 i frmMain list Count i TabPage mypage new TabPage 实例化TabPage控件对象 mypage Text frmMain list i ToString 设置版本面板Text值 mypage ToolTipText frmMain HTable2 mypage Text ToString 设置提示文本 Label lab new Label lab Text frmMain HTable2 mypage Text ToString lab AutoSize true lab Location new System Drawing Point 20 20 LinkLabel linklab new LinkLabel linklab Text 点击下载 linklab Location new Point 300 155 linklab LinkArea new LinkArea 0 linklab Text Length linklab LinkClicked new LinkLabelLinkClickedEventHandler this linklab LinkClicked mypage Controls Add lab mypage Controls Add linklab tabControl1 TabPages Add mypage else this Text 没有升级版本 int Swidth Screen PrimaryScreen WorkingArea Width 获取屏幕宽度 int SHeight Screen PrimaryScreen WorkingArea Height 获取屏幕高度 this DesktopLocation new Point Swidth this Width SHeight this Height 设置窗体加载时位置 成都大学专科毕业论文 设计 13 3 3 6 使用哈希表记录版本号及更新信息 为了记录存储在服务器上的版本信息和版本号 在此升级模块中用到了HashTable类 HashTable表示键 值对的集合 这些键 值对根据键的哈希代码进行组织 它的每一个元素都 是一个存储在DictionaryEntry对象中的键 值对 键不能为空引用 但值可以 在线升级模块中使用hashtable哈希表记录版本号及升级信息的主要代码如下 region 在XML文件中查找文件版本及更新信息 在XML文件中查找文件版本及更新信息 XML文件路径 Hashtable对象 用来记录找到的版本及版本更新信息 public Hashtable SelectXML string strPath Hashtable HTable new Hashtable XmlDocument doc new XmlDocument doc Load strPath 获取NewDataSet节点的所有子节点 XmlNodeList xnl doc SelectSingleNode UpdCfg ChildNodes string strVersion string strInfo foreach XmlNode xn in xnl 遍历所有子节点 XmlElement xe XmlElement xn 将子节点类型转换为XmlElement类型 if xe Name Upgrade 判断节点名为Upgrade XmlNodeList xnlChild xe ChildNodes 继续获取xe子节点的所有 子节点 foreach XmlNode xnChild in xnlChild 遍历 XmlElement xeChild XmlElement xnChild 转换类型 if xeChild Name VERSION strVersion xeChild InnerText if xeChild Name UpdInfo strInfo xeChild InnerText HTable Add strVersion strInfo return HTable 14 3 4 界面设计 3 4 1 服务器端界面设计 图3 1 在线升级服务服务器端软件界面主窗口 图 3 2 登录 FTP 服务器截图 3 4 2 客户端界面设计 成都大学专科毕业论文 设计 15 图 3 3 在线升级模块客户端主界面 图 3 4 客户端软件定时升级设置界面 16 第 4 章 模块详细设计说明 4 1 类库的设计过程 4 1 1 类库的设计过程 设计开发过程中 在Upgarde解决方案中添加了UpgradeClass项目 作为本在线升级 模块的类库 该类库主用用来编写服务器端和客户端公共使用的方法 在此之前 需要实例化一个 FtpWebRequest对象用来连接FTP服务器 FtpWebRequest reqFTP 实例化FTP客户端对象 由于此类库自定义了所有服务器端和客户端公共使用的方法 由于篇幅有限在此只列出一 些主要的方法 本论文中核心技术一节已经提到过的核心方法在此省略 其中 CheckFtp方法用来验证登录FTP的用户是否合法 见本文核心技术一节 Connet方法用来连接FTP服务器 见本文核心技术一节 GetFileList方法用来获取文件列表 见本文核心技术一节 Download方法用来从FTP服务器下载文件 见本文核心技术一节 SelectXML方法在XML文件中查找文件版本及更新信息 见本文核心技术一节 其余一些重要类库设计过程 AddXML方法用来将版本号及版本更新信息写入XML文件中 它有三个参数 分别表示要写 入的XML文件路劲 版本号及版本更新信息 AddXML方法实现代码如下 region 向XML文件中添加节点 向XML文件中添加节点 XML文件路径 版本 版本信息 public void AddXML string strPath string strNode1 string strNode2 XmlDocument doc1 new XmlDocument doc1 Load strPath XmlNode newNode1 XmlNode newNode2 newNode1 doc1 CreateElement Upgrade newNode2 doc1 CreateElement VERSION newNode2 InnerText strNode1 newNode1 AppendChild newNode2 newNode2 doc1 CreateElement UpdInfo newNode2 InnerText strNode2 newNode1 AppendChild newNode2 doc1 DocumentElement AppendChild newNode1 doc1 Save strPath 成都大学专科毕业论文 设计 17 endregion region 为INI文件中指定的节点取得字符串 为INI文件中指定的节点取得字符串 欲在其中查找关键字的节点名称 欲获取的项名 指定的项没有找到时返回的默认值 指定一个字串缓冲区 长度至少为 nSize 指定装载到lpReturnedString缓冲区的最大字符数量 INI文件名 复制到lpReturnedString缓冲区的字节数量 其中不包括那些NULL中 止字符 DllImport kernel32 public static extern int GetPrivateProfileString string lpAppName string lpKeyName string lpDefault StringBuilder lpReturnedString int nSize string lpFileName endregion region 修改INI文件中内容 修改INI文件中内容 欲在其中写入的节点名称 欲设置的项名 要写入的新字符串 INI文件名 非零表示成功 零表示失败 DllImport kernel32 public static extern int WritePrivateProfileString string lpApplicationName string lpKeyName string lpString string lpFileName endregion 18 region 从INI文件中读取指定节点的内容 从INI文件中读取指定节点的内容 INI节点 节点下的项 没有找到内容时返回的默认值 要读取的INI文件 读取的节点内容 public string ReadString string section string key string def string fileName StringBuilder temp new StringBuilder 1024 GetPrivateProfileString section key def temp 1024 fileName return temp ToString endregion 获取本地磁盘目录 public void listFolders ToolStripComboBox tscb string logicdrives System IO Directory GetLogicalDrives for int i 0 i logicdrives Length i tscb Items Add logicdrives i tscb SelectedIndex 0 region 获取服务器图标 给出文件扩展名 返回相应图标 若不以 开头则返回文件夹的图标 public Icon GetIconByFileType string fileType bool isLarge if fileType null fileType Equals string Empty return null RegistryKey regVersion null string regFileType null string regIconString null string systemDirectory Environment SystemDirectory if fileType 0 读系统注册表中文件类型信息 regVersion Registry ClassesRoot OpenSubKey fileType true if regVersion null 成都大学专科毕业论文 设计 19 regFileType regVersion GetValue as string regVersion Close regVersion Registry ClassesRoot OpenSubKey regFileType DefaultIcon true if regVersion null regIconString regVersion GetValue as string regVersion Close if regIconString null 没有读取到文件类型注册信息 指定为未知文件类型的图标 regIconString systemDirectory shell32 dll 0 else 直接指定为文件夹图标 regIconString systemDirectory shell32 dll 3 string fileIcon regIconString Split new char if fileIcon Length 2 系统注册表中注册的标图不能直接提取 则返回可执行文件的通用图标 fileIcon new string systemDirectory shell32 dll 2 Icon resultIcon null try 调用API方法读取图标 int phiconLarge new int 1 int phiconSmall new int 1 uint count Win32 ExtractIconEx fileIcon 0 Int32 Parse fileIcon 1 phiconLarge phiconSmall 1 IntPtr IconHnd new IntPtr isLarge phiconLarge 0 phiconSmall 0 resultIcon Icon FromHandle IconHnd catch fileIcon new string systemDirectory shell32 dll 2 20 调用API方法读取图标 int phiconLarge new int 1 int phiconSmall new int 1 uint count Win32 ExtractIconEx fileIcon 0 Int32 Parse fileIcon 1 phiconLarge phiconSmall 1 IntPtr IconHnd new IntPtr isLarge phiconLarge 0 phiconSmall 0 resultIcon Icon FromHandle IconHnd return resultIcon endregion 获取服务器的图标 public void getFTPServerICO ImageList il string ftpip string user string pwd ListView lv string path try string a lv Items Clear il Images Clear

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论