===========安装程序制作向导的开发思路==========
有很多朋友喜欢自己开发一些小软件,或自己用,或发布到网上和网友们分享。可是,每次制作好一个软件之后都要为它再写一个安装程序,并且这个安装程序一般不具有通用性,所以下次还要重新再写一个,感觉很麻烦。当然,网上已经有很多安装程序制作软件,比如,小颖安装程序制作专家就是一款不错的软件。这些软件功能随强大,但是不免有些地方不能符合我们的要求,所以有些朋友就想自己来制作一个安装程序制作软件,但是一些编程经验不多的朋友感觉无从下手,所以我就自己的拙见来向大家简单介绍一下此类程序中的几个难点。
我们先来一个简单的需求分析吧,其实你可以从网上下一个安装程序制作专家来看一下,就相当于需求分析了。其实需求大致分为三个部分,一是向导的步骤,二是收集那些信息,三是生成最终的安装程序。
首先,什么是安装制作向导呢。就是通过向导提问的方式,一步一步的制作安装程序,就像你用VC的wizard来生成应用程序框架一样。还有个问题是它应该都有那些向导步骤呢?这个问题其实也简单,相信大家都安装过无数的软件,呵呵。下面,我把步骤大致分为三个。
1--基本信息设置:
生成的目标文件的基本信息
软件所在目录
安装程序使用的系统特殊文件夹。
需要把那些动态库放到那些文件夹里。
创建快捷方式
垃圾文件清除
2--界面信息设置
安装背景
安装时各对话框的图片,欢迎信息,协议等等
3--系统操作设置
注册表相关
软件卸载注册
这些是向导的步骤,也是本软件重要功能之一。
其次,你要清楚的知道你需要收集那些信息,不过这个部分已经在向导步骤里有了详细的体现。
最后,要生成最终的安装程序,显然这部分是本软件的核心的。最终生成的就是一个文件,即安装程序,那么你的软件放在那呢,其实你的所有文件都压制到这个安装程序内部了。这个过程就和用WinRAR来制作一个自解压文件非常类似。当然,如果你觉得压缩算法很难的话也可以不进行压缩,而是简单压制。
好了,相信大家对需求部分已经清楚了。知道我们需要什么之后,就让我们大概分析一下,这中间有那些需要解决的问题。
问题1:
首先,这个软件的核心部分应该是如何将一个文件夹里的几层目录里所有文件压制成一个文件(压制也可以不包括压缩)。其实这个问题,可以描述成一个类似树的数据结构,要完成一个目录里所有文件的遍历,就是对一个树的遍历。对树进行遍历时有两种方式,一是递归,二是用栈操作。下面有一段简单的递归对文件夹遍历的程序:
//(用mfc中的CFileFind类,也可以用api中的类似函数)
int file_visit(CString path){ //path参数:目标目录
int r; //findfile的返回值
CFileFind cff; //CFileFind类,File类的继承,封装了
//findnextfile 等函数
r = cff.FindFile(path);
while(r){
//对目标目录进行文件搜索,(系统认为文件夹和文件都属于文件)
r = cff.FindNextFile();
//如果是目录,并且不是.和..目录,则递归调用本函数,进入下一层目录
if(cff.IsDirectory() && cff.GetFileName() != (CString)"." && \
cff.GetFileName() != (CString)".."){
file_visit(cff.GetFilePath()+(CString)"\\*.*");
}
if(!cff.IsDirectory()){
//如果搜索到文件,则对其进行相应操作
cout<<"file: "<<cff.文件名<<endl;
}
}
return 1;
}
很容易看出,只要将对文件的操作换成提取信息(解压时要用到的信息),进行读写,并将所有文件写入到一个目标文件中即可。
问题2:
最终,要生成的并不是一个简单的大文件。而是一个可以自己执行解压的可执行程序。
动态生成可执行文件,要牵涉到编译,和文件系统的原理,难度较大。但是,windows的PE文件有一个种特性,就是在其末尾加上任何数据后,它还能像没改变以前那样运行。所以,可以考虑把一个文件夹里的所有文件全部写入一个可执行文件的末尾。那么,我们可以先做好一个可执行文件,这个文件有一个空的安装向导的壳子,这个壳子可以向指定的位置找到自己要用的图片等信息,并且可以把自己末尾数据还原成一个文件夹,或是原来的多个文件,还有一些设置系统注册表的功能等。
然后我们将那个压制好的大文件全部写入这个壳子的末尾。好了,执行它就可以达成目标了。。。。当然,说起来容易,做起来就要牵涉和多复杂的东西。
通过这两个问题,可以看出,这个软件分成两个基本模块,一个是收集安装信息,并压缩文件夹的主程序。第二个就是那个功能类似于模板的解压壳子程序。当然还有一些系统操作,如注册表之类的东西,这些就要查看相关资料了。
作者:小鱼儿 QQ:278188240 E-Mail: [email protected]
转发时要保留作者信息
本文地址:http://com.8s8s.com/it/it474.htm