内容转自:http://www.51testing.com/?uid-18049-action-viewspace-itemid-17594
InstallShield 制作安装包实现自动化
一, 首先介绍下制作安装包大概流程
1, 介绍下制作前的注意事项
1 )准备好最新的 release 版本,要保证所有文件为最新
2 ) 删除不需要的文件,如在 VSS 上取下的 release 版本,则要去掉 vssver.scc , thumbs.db 和 *.pdb 文件
— > 整个文件夹中的文件要去掉只读属性
2, 清理好后,开始用 InstallShield 制作安装包了
1 )怎么新建工程,我就不说了,大家用下就知道了
2 )新建好工程后,在 scrīpts 面板中进行代码修改(根据你需要的安装包内容,形式自己写代码)
3 )选定 Setup files 面板— >Splash Screen — >Language Independent, 将您需要的欢迎图片 setup.bmp 替换到这里。
4 )选定 Setup files 面板— > Language Independent — >Operating System Independent ,将实际需要的许可协议文件、帮助文档等替换至此
5 )选定 File Groups 面板,将软件相关文件插入
6 ) Resource 面板里可修改产品名称、版本和快捷方式等
7 )可以在菜单 Project — >Settings 中修改如下选项。
a. 在 Application 中修改版本,公司名称 … 等
b. 在 Platforms 中修改平台信息
c. 在 Language 中修改语言信息
8 )编译运行
9 ) Media 媒体发布
3 , OK ,现在我们已经做好了一个安装包了,当然你也可以为安装制作的好看些,比如增加皮肤等,这个就不说了,下面是重要的地方,呵呵
先说下我的思路
第一步是把命令行编译批处理写出来(这个简单,可我当时是弄了一天才知道,哎,原来在 InstallShield 菜单面板上的 Build 下有个导出编译的批处理的)。
第二步是把我们生成的最终安装包和安装文件备份到另外的文件夹中去,可以用批处理来写,我是以当天的日期 + 项目名来新建目录的,保存为 Copy.bat 代码如下:
@echo off
if exist "%date:~0,-4%_XX 版 " (
goto date) else (
md "E:/XX 版安装包制作 /%date:~0,-4%_XX 版 "
)
:date
xcopy "E:/XX 版 /shield_ 网络版 /Media/New Media/Disk Images/Disk1/*.*" " E:/XX 版安装包制作 /%date:~0,-4%_XX 版 " /e /h
rem 这个就是你从你做安装包的程序路径中把制作的安装包拷贝出去
xcopy " E:/XX 版 /release/*.*" " E:/XX 版安装包制作 /%date:~0,-4%_XX 版 /release" /e /h
rem 这个简单,大家应该都知道,把源文件拷贝出去备份下
然后我们可以在 Build.bat 文件中调用这个 Copy.bat
第三步,本来做到这里就可以基本结束了,但是考虑到还有个问题没解决,所有加了这一步,当我们的项目中增加文件,或者是减少文件后,如果还是安装一,二步去操作,肯定有问题的,因为 InstallShield 在编译文件时,是根据 File Groups 文件夹下的 App Executables.fgl 中的文件路径来判断文件的,当你增加或者减少文件后,这里面的文件路径并没有相应的进行改变,这里我们就要写个批处理来进行自动生成 App Executables.fgl 文件了,看下面:
如你的 release 文件夹路径如下:
C:/ 123456 ------ 根目录
-->c:/123456/1----> 子目录 1
-->c:/123456/2----> 子目录 2
-->c:/123456/a.txt----> 文件 a.txt
-->c:/123456/b.dll----> 文件 b.txt
-->c:/123456/1/c.txt----> 文件 c.txt
-->c:/123456/2/d.dll----> 文件 d.dll
在 App Executables.fgl 文件中是这样排列的
[General]
Type=FILELIST
Version=1.10.000
[TopDir]
file0=c:/123456/a.txt
file1=c:/123456/b.dll
SubDir0=1
SubDir1=2
[1]
fulldirectory=c:/123456/1
file0=c:/123456/1/c.txt
[2]
fulldirectory=c:/123456/2
file0=c:/123456/2/d.dll
PS :我是先把这些内容写到一个 App Executables .txt 文件中,再改为 App Executables . fgl 格式。
下面的(现在完成了,发来补充下,需要写2个bat,run.bat和run2.bat)
run.bat如下,我的bat目录放在J:/江西版下
@echo
echo [General]>"%~dp0App Executables.fgl"
echo Type=FILELIST>>"%~dp0App Executables.fgl"
Echo Version=1.10.000>>"%~dp0App Executables.fgl"
echo.>>"%~dp0App Executables.fgl"
echo [TopDir]>>"%~dp0App Executables.fgl"
call J:/江西版/run2.bat J:/江西版/release
rem (J:/江西版/release)是你需要运行的文件夹
run2.bat如下
@echo off
set num=0
for /f "delims=" %%a in ('dir /b /a-d "%~1"') do (
call echo file%%num%%=%~1/%%a>>"%~dp0App Executables.fgl"
set /a num+=1
)
set num=0
for /f "delims=" %%a in ('dir /b /ad "%~1"') do (
call echo SubDir%%num%%=%~2%%a>>"%~dp0App Executables.fgl"
set /a num+=1
)
echo.>>"%~dp0App Executables.fgl"
set num=0
for /f "delims=" %%a in ('dir /b /ad "%~1"') DO (
echo [%~2%%a]>>"%~dp0App Executables.fgl"
echo fulldirectory=%~1/%%a>>"%~dp0App Executables.fgl"
call J:/江西版/run2.bat %~1/%%a %~2%%a/
set /a num+=1
)
终于是把这个东西写好了,现在可以支持不管多少层的文件夹了