内容转自: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
)
终于是把这个东西写好了,现在可以支持不管多少层的文件夹了