`
cyxlgzs
  • 浏览: 89900 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

关于制作安装包的基本操作(InstallShield)

 
阅读更多

最近有一个项目是c/s模式的,必须制作安装包,已达到客户使用的简单化。对于我一个以前没有做个安装包的人,在网上找了一些资料,加上自己的一点实践,终于做好了。

好在一开始就有了一个概念,制作安装包可以使用InstallShield,以前觉得这玩意神乎其神的,其实也没什么了,多查资料,多实践就好了。再一次验证了我的一个观点:对于我们开发者而言,知道某种技术或者说工具的用途和概念,比我们知道怎么用他更有益。因为技术和工具太多,我们不可能一次性全部把他们全部学会,也没必要,只有当我们需要做一些事情的时候,我们知道某种东西可以更加方便的实现我们的需求的时候,我们再去学他,这样就事半功倍了。

呵呵,扯了大半天。开始讲述一下大概过程和涉及到的关键东西吧

1、当然是下载一个InstallShield安装一下咯,我的是InstallShield 2010 Premier Edition with version 16

2、新建一个项目吧,这里我们新建一个Windows Installer下的InstallScript MSI Project,至于每个项目的区别就网上查资料看看了。输入项目名称,选择存储路经,确定ok

3、工具栏下面有三个选项卡,分别是Start Page、Project Assistant和Installation Designer。其中Project Assistant是一个向导式的安装包制作流程,可以完成基本的打包等工作。Installation Designer则是更加具体,功能更加强大的安装包制作方式,可以采用脚本的方式控制安装步骤的执行。我们可以采用Project Assistant和Installation Designer相结合的方式来完成这次制作过程

4、在Project Assistant页面中的下方选择“Application Information”,输入一些软件的基本信息;选择“Installation Requirements”设置一些安装的环境需求,这里没设置;选择“Installation Architecture”设置一下文件的结构,这里我们新建了三个文件夹,分别是Server、Client、Doc,分别存放服务器、客户端和文档内容。这里设置的对应Installation Designer下的Organization下面的features,把Features下面的三个子项更改为Server、Client和Doc;回到“Project Assistant”页面,选择“Application Files”,可以设置每个文件夹下面所包含的内容,这里我们不采用这种静态的方式,因为如果这里设置了,不管你选择只安装服务端或者客户端等,都会把所有文件都拷贝到安装目录下,所以我们采用脚本的方式动态加载需要的文件;当然采用Project Assistant也可以设置注册表等操作,但是后面的操作,我们基本上都采用脚本控制

5、选择Installation Designer页面左边树状栏里选择Behavior And Logic下面的InstallScript,新建一个Script File,系统自动命名为Setup.Rul,这个名字不要更改。在代码编辑区的上面我们可以看到有一个函数生成帮助,可以自动为项目生成一些安装脚本。可以自己试试。下面我把整段代码贴上来,然后对重要的地方进行解释

解释部分:

a、首先定义了一些局部变量

STRING psvSQLsvr, psvSQLusr, psvSQLpwd;
BOOL bvWindowsLogin;

因为本安装程序需要sql server数据库的支持,所以以上全局变量用来保存连接数据库信息

b、申明自定义函数

prototype number CreateDataBase(STRING,STRING,STRING);//创建数据库
prototype number SQLLogin(); //定义登录函数

c、函数OnBegin中

if(!MAINTENANCE)then
SdLicense2 ("License", "", "", SUPPORTDIR ^ "license.txt", FALSE);
endif;

用来显示软件的协议,其中license.txt添加到SupportFile中,操作Behavior And Logic->Support Files/BillBoards,在SupportFiles下的第一个Language Independent右边插入license.txt

利用注册表检测软件依赖的环境是否安装

RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);//设置注册表根
if (RegDBKeyExist ("SOFTWARE//Microsoft//.NETFramework") < 0) then //判断注册表项是否存在
if(LaunchAppAndWait (SRCDIR^"dotnetfx20.exe","", LAAW_OPTION_WAIT)<0)then//运行程序
MessageBox ("You haven't installed dotnet framework yet! ", INFORMATION);
abort;
endif;
endif;

d、函数OnFirstUIBefore中

if (FeatureIsItemSelected(MEDIA, "Server")=1) then

判断是否选择安装服务器,这里跟前面设置的feature相关,其中“Server”就是feature的名字

nResult = SQLLogin();

调用自定义函数SQLLogin

listStartCopy = ListCreate( STRINGLIST );

创建列表

ListAddString(listStartCopy,"Customer Information:",AFTER);

往列表中添加信息

nResult = SdStartCopy( szTitle, szMsg,listStartCopy);

根据开始拷贝需要的文件
ListDestroy(listStartCopy);

销毁列表

e、在函数OnFirstUIAfter中

我们这里的文件拷贝都放在此函数中,根据选择安装的feature动态的拷贝所需文件

CopyFile(szSrcFile5, TARGETDIR^"icon//*.*"); //拷贝目录下的文件

RegDBSetKeyValueEx(szKey, "VALUE1", REGDB_STRING, "wHpb9E6JNaQ=", -1); //写注册表

FindAllFiles(TARGETDIR^"Server", "*.exe", szDocFile, RESET); //查找目录下的文件

AddFolderIcon(FOLDER_PROGRAMS^"EstartManage//Server",szDocFileName, szDocFile, "", TARGETDIR^"icon//server.ico" , 0 ,"" , REPLACE ); //添加快捷方式

CreateDataBase(psvSQLsvr,psvSQLusr,psvSQLpwd); // 调用自定义函数,创建和 优化数据库
SdFinishEx(szTitle, szMsg1, szMsg2, szOption1, szOption2, bOpt1, bOpt2); //显示复选框

LaunchApp ( WINDIR^"Notepad.exe" , TARGETDIR^"README.TXT" ); //显示readme文件

然后就是创建卸载快捷方式

脚本中还涉及到多种目录的表示方式,具体理解请参考代码

6、发布

a、可以在User Interface下的Dialogs下的Skins设置安装界面的样式

b、选择工具栏中的光标图标制作光盘

7、尾声

好了,制作安装包的过程就差不多这些。文中基本涉及到制作安装的所有基本知识了,如果需要深入,请网上找资料吧。感谢很多网友提供的学习资料。希望对你有所帮助,如有任何疑问或者错误欢迎交流

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics