虽然网上关于InstallShield的制作说明已经很多,但是看的时候还是会有些晕乎乎的,不得不说很复杂。
前段时候做了一次,后面需要升级,在重新做的时候发现有些地方自己又忘了,所以有必须将自己看的教程和实际操作的体会结合起来,认真的写个特别详细的制作说明,使步骤尽可能简化清晰,为了自己也为其他同仁。
各位可以先下载已做好的安装包,看看是否符合你的需求。
一、在制作安装包前,先整理一下安装文件先来看“先决条件安装文件”,这里我们用来存放运行该产品需要的基本环境(比如:Net Framework、数据库等)的安装文件。
另外还放了图标和许可协议,制作的时候需要,放一起便于管理。
再来看看“XX软件”,可以看看QQ在安装后的开始菜单里,会先有腾讯软件->QQ2013->QQ 这样的目录结构,这样的结构使得一个公司的产品放在一起便于用户查看。
所以我也采用这种结构来先整理目录结构,这个结构也是用户安装产品后的目录结构。
上面APP_1和APP_2是独立的应用分开放,外面的数据库配置是公用部分放最外面。
当然,“XX产品”里面的目录需要根据你实际情况来决定。
不过,在你制作安装包前,一直要试一下各个exe程序能不能正常运行,否则做好后运行不了,找不到原因就麻烦了,毕竟快捷方式只是个链接。
这里说明一下为什么会有这个DataBaseSetting.exe呢,因为我们的产品可能需要新建数据库、需要修改注册表等操作,但是用InstallShield来做这些,对于不熟悉的人来说还是很麻烦的,或许就不能做,所以还是用C#写了个小程序来做这些工作要简单的多,只是要多点下按钮,但更灵活。
二、新建一个“InstallScript MSI Project”工程三、在引导条上配置基本属性Project Assistant是类似于界面操作【Project Assistant】->【Application Information】,输入公司名,产品名,版本号,网址。
再修改卸载图标,这个图标是将在【控制面板】的【添加或删除程序】看到。
【Project Assistan】->【Installation Requirements】,这里你可以指定运行的系统和先决条件,我试过限制系统,应用没试过,一般这里可以都不修改。
四、设置安装的组件Component打开【Installation Designer】->【Component】面板,先删掉默认的DefaultComponet,下面开始逐个添加Component。
右击【Component】新增【New Component】,命名为APP_1,与上面文件夹名对应,这里是不可以用中文的。
这里先指定APP_1的安装路径,点击APP_1,选择右侧【Destination】,会弹出【Browse for Directory】,这里可以看到【ProgramFilesFolder】就是指C盘下的Program File。
现在的目录比较乱,先删除掉【My Company Name】和【My ProductName】,然后再在【XX产品】下新建【APP_1】,这个路径就是APP_1中的文件将要安装到的路径了。
注意,这里你点击【XX产品】,会看到INSTALLDIR,但不能修改,你可以点击【Installation Designer】->【Installation Information】->【General Information】,查看到INSTALLDIR,也是可修改的。
你可能还会看到变量TARGETDIR,这个是安装过程中让用户选择的安装路径。
而在InstallScript MSI和Basic MSI工程中,安装路径变量是INSTALLDIR。
然后选择Files,在右侧面板中点击【Add】,添加文件,可以选择也可以直接拖进来。
同样,新增【APP_2】组件,与上面一样也要指定Destination。
然后添加文件,这里我故意多加了个Folder的文件夹,上面的单目录结构,直接拖进去就可以了,但是多目录结构是不行的,需要右击选择【Dynamic File Linking】,然后打开【Modify Dynamic Links】面板,再点击【New Link】,打开【Dynamic File Link Settings】面板,然后点击【Browse】,选择App_2的文件夹,再确定就添加成功了。
还有一些和APP1、APP2同级的文件放哪呢,我们再新建一个ROOT的Component用来链接它们。
这里我们不需要指定destination了,因为这些文件是需要装在【XX产品】下的。
五、创建快捷方式打开【Installation Designer】->【Component】面板,这里将创建APP1、APP2的桌面快捷方式,和APP1、APP2、Root的开始菜单快捷方式。
点击【APP_1】的【Shortcuts】上图【Programs Menu】即对应的”所有程序”,【Desktop】即桌面。
右击【Programs Menu】,选择【New Folder】来新建结构”XX公司->XX产品”。
然后,再右击【XX产品】,选择【New Shortcut】,找到DemoApp_1.exe,点击【Open】,即会创建快捷方式。
然后可以通过右击选择【Rename】来修改名称,通过【Change shortcut icon】来修改快捷图标。
同样,按照上面的步骤来新建其他的快捷方式。
但是你在创建APP_2的快捷方式的时候,你会发现找不到APP_2.exe,这是因为APP_2是通过动态链接加入进来的,所以需要重新在【File】下,将原来的APP_2.exe的链接单独加进来。
右击不能删除,直接将APP_2拖进来覆盖就可以了,图标和之前不一样了。
这里DataBaseSetting.exe我没有创建桌面快捷指示创建了开始菜单,避免桌面图标过多,具体根据实际情况。
最后,我们在跳转到面板【Project Assistant】->【Application Shortcuts】,点击左侧的【Create an uninstallation shortcut】即会创建一个卸载的快捷方式。
在回到【Installation Designer】->【Component】面板,会看到多了一个【NewComponent1】,这个组件就是卸载程序的组件,我们先把名字改成Uninstall,把快捷方式的nameh改成中文。
还有把卸载的Display Name也需要修改掉,直接改好像总是不起作用,直接点击【…】打开Select String面板,将原来的删除掉,新增一个String。
六、创建特性Features打开【Installation Designer】->【Organization】->【Feature】,在这里我们将创建特性Feature,我们经常安装程序的时候会看到用户可选择的安装项,这些其实就是Feature,安装包的安装就是针对Feature来安装的。
上面我们已经建好了Component,这里继续为每一个component 建一个Feature。
删除掉默认的DefaultFeature,在新建Feature. 这里和component一样不能用中文,但你可以把右侧的Display Name修改为中文,这就是让用户勾选时,显示的名字另外,Root和Uninstall这两个Features,我们是不打算让用户选择安装的,而是默认就会装的,所以把这两个Features的Display设置为Not Visible接下来就是要让这些Feature与Component关联起来。
打开【Installation Designer】->【Organization】->【Setup Design】面板选中APP_1,右击选择【Associate Component】,然后再弹出的对话框中选则APP_1的Component,这样就关联上了。
到这里你可以先编译一下看看效果了,点第一个红色按钮,编译,第二个将打开编译后生成文件所在文件夹。
点击“setup.exe”就可以安装了。
如果你重新点击【build】,如果提示错误,可能是你没有把生成的setup所在的文件夹关闭掉。
安装已经基本成型了,但是这种皮肤、安装步骤都不一定符合我们实际的需求,所以我们都会去修改定制,下面说一下我的修改内容。
七、皮肤打开【Installation Designer】->【User Interface】->【Dialogs】面板点击【Dialogs】,可以看到Skins,这就是各种不同的皮肤,这里我改为“BlueTC”下面的【All Dialogs】,就是我们在安装过程中所看到的一个个对话框八、许可协议打开【Installation Designer】->【Behavior and Logic】->【Support Files/Billboards】面板这里【Language Independent】是指的设置将在任何语言下都会起作用相当于默认,下面还有【中文(简体)】,就相当于分支,只有中文下起作用。
这里我们就只做通用的,在【Language Independent】,添加“软件许可协议.txt”文件。
然后,再点击【Disk1】,这里我们存放一些运行系统所需的先决条件,这些文件是不会打包到setup.exe里面,而是跟setup.exe平级的,因为这些条件不是每台机器都需要的,也不属于产品内的东西。
九、安装脚本这部分是最复杂,也是最重要的。
打开【Installation Designer】->【Behavior and Logic】->【InstallScript】面板脚本事件主要有三大类:Before Move Data(安装数据前)、Move Data(安装数据过程中)、After Move Data(安装数据后)。
OnBegin:在初始化后,被调用OnFirstUIBefore:第一次安装时,在复制安装数据之前触发的事件,更改这个事件的脚本可自定义安装步骤(一般我们都是修改这个)OnMainUIBefore:在修改或卸载时,在复制安装数据之前触发的事件,例如安装程序在安装时添加了服务,在卸载时安装程序不会将此服务反安装,这就需要脚本删除服务。
OnSQLLogin:Ms SQL SERVER数据库安装登录函数。
MoveData:一般很少有人会去改OnFirstUIAfter: 第一次安装时,在复制安装数据之后触发的事件,例如有些地方需要设置路径,在安装前路径不存在,必须安装后才能设置。