InstallShield学习笔记一:工程选择
由于项目需求需要用到Installshield 2014完成打包工作,在使用Installshield 2014过程中,遇到一些问题,在这里记录下,方便以后查看。
1.Installshield安装包下载地址:
http://www.flexerasoftware.com/resources/free-trials/#installshield
需要输入Email信息,在邮件中会出现连接路径,点击链接下载即可。
2.安装工程选择
Installshield包含很多类型的工程,项目中用到的 InstallScript 和 InstallScript MSI 。可以点击查看两者具体差别:
http://www.cnblogs.com/installshield/archive/2010/09/19/1831122.html。
这里在重复下:
InstallScript工程基于InstallScript脚本控制。如果有以下需求,推荐使用InstallScript类型的工程:
- 对用户界面有更高的需求,需要自定义安装界面。
- 安装时你需要全屏的背景广告板。
- 你喜欢写程序控制安装过程,而不是填写一些表格数据。
- 你倾向在安装之前或之后执行自己的操作。
- 你需要升级一个已有的InstallScript工程。
InstallScript MSI是InstallScript工程类型和Basic MSI工程类型的混合,执行安装的过程中它既用到Windows Installer,也用到了InstallScript引擎。如果有以下需求,推荐使用InstallScript MSI类型的工程:
- 需要进行Windows Vista和Windows 7的Logo认证。
- 对用户界面有更高的需求。
- 你喜欢写程序控制安装过程,而不是填写一些表格数据。
- 你倾向在安装之前或之后执行自己的操作。
- 你需要升级一个已有的InstallScript MSI工程
这里说下使用 InstallScript MSI 和 InstallScript 这两个不同工程给感受:
在项目开发过程中,一开始使用的是 InstallScript MSI 工程打包,在将近完成安装包制作的时候,发现几个问题无法解决:
1.准备安装框无法隐藏。
(1)在执行安装程序时,会弹出这个“正在准备安装…”的对话框,在安装过程中这个对话框显示是很正常的,
但是在卸载掉时候,也出现这个对话框,而且一模一样。。。试想,用户在卸载提示正在安装,感觉总归不是很好。。
尝试修改:
方案一:
“正在准备安装…”这个对话框正常情况下,无法修改显示的内容,因为在资源文件“String Editor”中找不到对应的资源文件。
注意:在“String Editor”中的“IDS__IsInitDlg_PreparingWizard”这个资源文件是其他对话框,不是这个对话框的。、
方案二:
在Installshield安装目录下,找到 0x0804.ini 这个配置文件(这个是中文的配置文件,英文的配置文件是:0x0409.ini),修改里面的信息。
注意:
(1)这个方案修改的是内容,如果想要保留“正在准备安装…”这个对话框,修改的对话框内容最好是 安装 和 卸载 让用户不费解的提示内容。
(2)请谨慎修改Installshild安装包的配置文件信息,一旦修改,其他工程也会同时修改,切记。
方案三:
如果显示有问题,那么可以让安装包不显示“正在准备安装…”对话框,在参数栏中使用:/hide_progress。
注意:InstallScript 只要配置这个参数就能够完整对初始化对话框的隐藏。
而在 InstallScript MSI,使用如下配置是不生效的。。
这样做是行不通的的。。。
官方文档描述:
For InstallScript MSI installations: If you include a splash screen, the installation automatically switches to the small
progress dialog, and the splash screen is shown only during the time that the progress dialog is displayed. Note that this is
true even if /hide_progress is specified. Therefore, it is recommended that you avoid using /hide_progress with a
splash screen in InstallScript MSI installations.
意思差不多是在 InstallScript MSI 工程里只能用MSI参数,而/hide_progress即使设置上也没有效果,但是可以在被第三方调用,或在命令行启动Setup.exe时使用。
2.安装过程中取消后,再次点击安装包需要卸载
在项目开发中,这个功能非常鸡肋。因为在项目中,需要在 OnFirstUIAfter() 后在做一些额外的操作,此时在OnFirstUIBefore()已经完成了安装,
在注册表上已经写入了数据。如果这个时候取消,然后再次点击安装的时候,会提示先卸载之前的安装,卸载完成后才能再次安装,这个对用户体验来说,
非常不合理。
3.安装过程中,界面呈现资源文件无法修改,而且无法控制安装卸载触发流程
在使用过程中,安装和卸载的有些页面在 “Dialogs”找不到,也不知道这些页面具体是在哪里触发的,无法在不修改 Installshield 配置文件的前提下修改资源或者界面。
总的来说,就是没有一个可以控制安装流程的地方,这些在某些细节或者用户体验上来说,是不能够接受的。
4.优点:
(1)InstallScript MSI 工程为每个 Component 都分配一个唯一的GUID,这个ID在安装的时候会写入到注册表,在做升级或者卸载的时候会很方便,
当然,相应的需要增加脚本码执行代码。
(2)能够即时进行页面调试,这个功能在 InstallScript 下是没有的
(3)提供更全面的功能。当前 InstallShield 2014 不支持中文,对功能学习了解只能查看英文用户手册。。很蛋疼。。
总结:
基于上述的几个原因,最终选择了 InstallScript 工程作为最后打包工程。确实,在使用过程中发现 InstallScript 的界面比 InstallScript MSI 更清爽,
出现问题一般都会从编写脚本的角度去考虑解决,这样更有针对性。
当然,对于其他工程,InstallScript 未必是个好的选择,InstallScript MSI 或许更好。
值得一提的是:两个工程在间切换是非常快的,即使中途发现工程类型选择错误,也能够快速切换。