IS2009制作Oracle 静默安装包(二) 感谢空白先生特许授权
原文:IS2009制作Oracle 静默安装包(二) 感谢空白先生特许授权

上一篇: IS2009制作Oracle 静默安装包(一)感谢空白先生特许授权

本文经原作者特许授权于海洋女神发布,转载请务必注明出处与链接;原作者和海洋女神保留对该文的一切法律许可下的权益;需要发布在盈利性报刊、网站等请与原作者或海洋女神联系。

第三部分:使用IS2009
向导设置
1. 打开 InstallShield2009,新建一个Installscript MSI Project,建议选择此工程,因为该工
程支持脚本编写。选择类型为Windows Installer > InstallScript MSI Projcet

2. 进入IS 向导设置界面,下面我们分别进行设置。下图为Application Information 页面

3. 点击导航,进入Installation Architecture页面,选择YES设置软件组件结构。Files 为安
装文件,Database为数据库文件。

4. 点击导航,进入Application Files 页面,设置安装目标文件夹,并且在database 文件夹
下添加如下文件。

安装设计
1. 在向导设置中进行简单操作后,进入安装设计标签页面。

2. 在基本设置页面查看安装目录和语言设置

3. 在Organization –>Features中设置安装路径,以及其他的设置。下图为Files 的设置

下图为Database的设置,注意目标路径为[INSTALLDIR]Database,该文件夹是在Files文件夹
下的目录。

请设置好OnInstalling、OnInstalled、OnUninstalling、OnUnistalled选项。该选项允许用
户指定和调用相关的Install Scripe 函数。后边我们在IS 中的脚本编程中将讲到如何在这些
函数中写代码。

4. 用户也可以在Application Data ->Files and Folders 中查看或添加修改文件。

5. 在Behavior and Logic—>Support Files/Billboards中的Disk1下添加需要安装包支持的文件
和文件夹。Win32 文件夹是存放基础脚本的文件夹;database文件夹是Oracle的安装文件夹;
Temp_10G.dbc和Temp_10G.dfb 为建库模板文件。

以上步骤完成了IS中的基本设置和安装设置,只要是目录结构的选择,Files文件夹是
安装程序文件的文件夹,它的参数是[INSTALLDIR]。它的目录下是Database文件夹。参数
是[INSTALLDIR]Database。另外注意,3 个脚本文件必须放在指定的文件夹位置,这关系
到脚本语言中的相互调用。
支持文件将存放在光盘的跟目录下,这给我们直接调用这些文件带来了方便。

第四部分:IS2009中的脚本编程
传递源路径参数
用户在使用IS 安装过程中,我们不能够将所有信息都复制到本地硬盘进行安装,通常
情况下会读取源盘上的一些信息,譬如光盘下的某个路径中的内容。但是如何获取安装的路
径信息呢?又如何让批处理文件获知这些内容呢?
这里我们用到IS函数库中的3个函数:
BatchAdd(添加一个环境变量到一个批处理文件)
BatchFileLoad(把一个批处理文件装入内存来用高级批处理函数编辑它)
BatchFileSave(保存一个由BatchFileLoad装入的批处理文件)
BatchAdd函数插入一个SET命令或其它DOS命令到一个已经由BatchFileLoad装入内
存的批处理文件中。参数nOptions 使你可以将新命令添加到文件的第一个或最后一个语句,
用新命令取代一个现存语句,或指定将新命令添加到一个现存语句的前面或后面。调用
BatchAdd前,你必须调用BatchFileLoad来把要修改的文件装入内存。在你修改该文件后,
调用BatchFileSave来把它保存到磁盘。
下面我们在IS2009 中去使用这些函数。
1. 在 Installation Designer 中选择IS左边栏的Behavior and Logic中的InstallScript。
2. 在脚本框的上方,下拉选择框,选择Files
3. 之后,选择右边的下拉框,选择Installed
之所以选择Installed,是因为安装过程中会把Install.bat 批处理脚本复制到本地硬盘,
只有在成功复制之后,我们才能调用该批处理脚本,使用这些函数。
如图所示:

Installed 函数中的具体脚本如下:

#define EXAMPLE_BAT INSTALLDIR^"Database\\install.bat"
#define EXAMPLE_BAK "install.bak"
export prototype DefaultFeature_Installed();
function DefaultFeature_Installed()
STRING TARG,SOURCE,TARG1;
STRING DBPATH,DATA,DATAsur,TITLE;
begin
// Load the batch file to be edited.
if (BatchFileLoad (EXAMPLE_BAT) < 0) then
MessageBox ("Unable to load " + EXAMPLE_BAT+".", SEVERE);
abort;

endif;
DBPATH = SRCDISK + "\\";
// Add the line SET PATH = SRCDISK+"\\”.
if (BatchAdd ("SOURPATH", DBPATH, "", BEFORE) < 0) then
MessageBox ("Second call to BatchAdd failed", WARNING);
abort;
endif;
// Save the updated file; back up the original file.
if (BatchFileSave(EXAMPLE_BAK) < 0) then
MessageBox ("Unable to save " + EXAMPLE_BAK + ".", SEVERE);
//else
// MessageBox ("Batch file saved. Backup created.",INFORMATION);
endif;

该脚本中,我们定义Install.bat 的安装路径,并且在开始处用BatchFileLoad函数调用它,
注意,该调用并不是执行它,而是在内存中临时调用。然后设置一个变量DBPATH = SRCDISK
+ "\\",SRCDISK 是IS判断Setup.inx所在的位置,取出安装盘符,当然我们后边要加上反斜
杠。譬如光盘在F:我们这样做的目的就是在批处理的第一行插入Set SOURPATH = F:\ 。
BatchAdd 函数用于加载这个变量,保证在该批处理文件中最开始就设置这一变量。最后使
用BatchFileSave保存批处理文件。
同样,在卸载时候我们同样需要在Deinstall.bat 中这样去做,只是位置要确定在
Uninstalling,并且定义deinstall.bat 的安装路径即可。

UnInstalling 函数中的具体脚本如下:
#define UNINSTALL_BAT INSTALLDIR^"Database\\deinstall.bat"
#define UNINSTALL_BAK "deinstall.bak"
export prototype DefaultFeature_UnInstalling();
function DefaultFeature_UnInstalling()
STRING TARG,SOURCE;
STRING DBPATH,DATA,DATAsur,TITLE;
begin
// Load the batch file to be edited.
if (BatchFileLoad (UNINSTALL_BAT) < 0) then
MessageBox ("Unable to load " + EXAMPLE_BAT+".", SEVERE);
abort;
endif;
DBPATH = SRCDISK + "\\";
// Add the line SET PATH = SRCDISK+"\\".
if (BatchAdd ("SOURPATH", DBPATH, "", BEFORE) < 0) then
MessageBox ("Second call to BatchAdd failed", WARNING);
abort;
endif;
// Save the updated file; back up the original file.
if (BatchFileSave(UNINSTALL_BAK) < 0) then
MessageBox ("Unable to save " + UNINSTALL_BAK + ".", SEVERE);

//else
// MessageBox ("Batch file saved. Backup created.",INFORMATION);
endif;

执行批处理文件
我们修改完批处理文件,就要在修改保存之后执行它。这需要用到Is 函数库中的
LaunchAppAndWait()函数
语法:LaunchAppAndWait (szProgram, szCmdLine, lWait);
说明:LaunchAppAndWait函数运行由szProgram指定的带有szCmdLine指定的命令行
参数的应用程序。第三个参数,lWait 指示安装在继续前是否要等待直到运行的应用程序终
止。
一个安装程序只能监控由szProgram 指定的应用程序;如果该应用程序要运行其它应
用程序或进程,安装程序不能监控它们。因此,安装程序将在第一个应用程序结束后继续,
即使那时由第一个应用程序运行的其它应用程序仍在运行。注意如果运行的应用程序终止失
败,则安装程序将无限等待运行的应用程序完成。
添加在Installed脚本的后面:
TARG = INSTALLDIR^"Database";
if (LaunchAppAndWait(INSTALLDIR^"Database\\install.bat",TARG,LAAW_OPTION_WAIT |
LAAW_OPTION_HIDDEN) < 0) then
MessageBox ("Unable to launch install.bat",SEVERE);
endif;
end;
LAAW_OPTION_HIDDEN 这个参数是隐藏bat 的执行窗口, 它与
LAAW_OPTION_WAIT并用是隐藏并且等待程序执行完成后返回,注意他们的前后顺序。
添加在UnInstalling脚本的后面:

TARG = INSTALLDIR^"Database";
if
(LaunchAppAndWait(INSTALLDIR^"Database\\deinstall.bat",TARG,LAAW_OPTION_WAIT |
LAAW_OPTION_HIDDEN) < 0) then
MessageBox ("Unable to launch deinstall.bat",SEVERE);
endif;
end;
脚本已经完成,我们编译脚本,并确定没有任何的问题。

第五部分:其他
修改界面风格
1. 在 Installation Designer 中选择IS左边栏的User Interface中的Dialogs
2. 在右边窗口中选择Skins,选择之后点击Select
3. 界面窗口风格改变

编译打包
1. 在 Installation Designer 中选择IS左边栏的Media 中的Realrases
2. 在右边栏Releases点击右键,选择ReleasesWizard…
3. 出现向导界面
4. 在该界面中,注意几个界面,其余均为默认
5. Filter Setting界面,不要做任何的选择
6. Media Type界面,选择Network Image

注意:该地点不要选择过滤!!默认即可,若选择,导致读取光盘1158问题!上图为错误图

完整的安装包文件

第六部分:遇到的问题
1158问题:过滤语言操作导致,不选择过滤项即可
中文输入乱码问题:在向导中进行中文输入即可
环境变量问题:由于IS提供设置环境变量的功能,先开始认为在IS中设置环境变量就可以
通过bat去读取,但是这样做是错误的,变量是可以添加成功,但不允许该次的调用,所以
放弃了这种方法,改用函数。
设计思路问题:先开始是创建新库,并分别导入表,创建用户,导入数据,这样做麻烦的要
死,参数问题不断。后来改用数据模板建库。
目录问题:开始是这样打算的,把文件和数据库用不同的目录区分开,UI 中出现两个路径
选择页面,可是IS中只提供一个安装INSTALLDIR 的目录的参数,另外一个目录路径我不
知道如何获取和调用。故采用在INSTALLDIR目录下又创建了Database文件夹。
第七部分:总结
本人第一次使用IS,走了不少弯路,先开始用IS Express版本,发现根本无法使用脚本,改
成IS09,由于对Oracle 的不熟悉,批处理的不熟悉,IS 编程语言的不熟悉,导致此次制作
过程颇为漫长。零零散散历时一个多月的时间。
这里要感谢IS群的帮助,是他们给我前进的动力。问题一一排除,最终做好产品,提交Oracle。
特别感谢,海洋女神,奕婷,Blue,宇心,csp等等。。。
以上全部内容仅仅包含ORACLE 的打包,公司的产品应用并没有放在其中。
IS 群19622645 空白制作QQ:28021418

部分源代码
export prototype New_Feature_Installing();
function New_Feature_Installing()
begin
end;
//---------------------------------------------------------------------------
// The Installing event is sent before the feature DefaultFeature
// is installed.
//---------------------------------------------------------------------------
export prototype DefaultFeature_Installing();
function DefaultFeature_Installing()
STRING diskpath,szCommand,szCmdLine,szCommandecp,szCmdLineecp;
begin
diskpath = SRCDISK + "\\"; //定义安装盘路径
//运行framework20安装程序
if (LaunchAppAndWait(SRCDIR^"supportfiles\\dotnetfx.exe","",LAAW_OPTION_WAIT/* |
LAAW_OPTION_HIDDEN*/) < 0) then
MessageBox ("Unable to launch dotnet",SEVERE);
endif;
if
(LaunchAppAndWait(SRCDIR^"supportfiles\\framwork2.0\\setup.exe","",LAAW_OPTION_WAIT/*
|
LAAW_OPTION_HIDDEN*/) < 0) then
MessageBox ("Unable to launch dotnet2",SEVERE);
endif;
//定义MSI文件参数及MSI文件位置
szCommand = WINSYSDIR^"msiexec.exe";
LongPathToShortPath(szCommand);
szCmdLine =SRCDIR^"supportfiles\\EngineRT\\setup.msi";
LongPathToShortPath(szCmdLine);
//运行MSI文件
if (LaunchAppAndWait( szCommand,"/i"+szCmdLine,LAAW_OPTION_WAIT) < 0) then
MessageBox ("Unable to launch ACGIS",SEVERE);
endif;
// szCommandecp = SRCDIR^"supportfiles\\SoftwareAuthorization.exe";
// LongPathToShortPath(szCommandecp);
// szCmdLineecp =SRCDIR^"supportfiles\\license.ecp";
// LongPathToShortPath(szCmdLineecp);

if (LaunchAppAndWait(SRCDIR^"supportfiles\\Runecp.bat",diskpath,LAAW_OPTION_WAIT/*
|
LAAW_OPTION_HIDDEN*/) < 0) then
MessageBox ("Unable to launch ecp",SEVERE);
endif;
end;
//---------------------------------------------------------------------------
// The Installed event is sent after the feature DefaultFeature
// is installed.
//---------------------------------------------------------------------------
#define EXAMPLE_BAT INSTALLDIR^"Database\\install.bat"
#define EXAMPLE_BAK "install.bak"
export prototype DefaultFeature_Installed();
function DefaultFeature_Installed()
STRING TARG,SOURCE,TARG1;
STRING DBPATH,DATA,DATAsur,TITLE;
begin
// Load the batch file to be edited.
if (BatchFileLoad (EXAMPLE_BAT) < 0) then
MessageBox ("Unable to load " + EXAMPLE_BAT+".", SEVERE);
abort;
endif;
DBPATH = SRCDISK + "\\";
// Add the line SET PATH = SRCDISK^"test".
if (BatchAdd ("SOURPATH", DBPATH, "", BEFORE) < 0) then
MessageBox ("Second call to BatchAdd failed", WARNING);
abort;
endif;
// Save the updated file; back up the original file.

if (BatchFileSave(EXAMPLE_BAK) < 0) then
MessageBox ("Unable to save " + EXAMPLE_BAK + ".", SEVERE);
//else
// MessageBox ("Batch file saved. Backup created.",INFORMATION);
endif;
//DATAsur = "C:\\";
//DATA = SRCDISK^"test";
// TITLE = "Path buffer example";
// PathSet (DATAsur);
//SprintfBox (INFORMATION,TITLE,
// "The starting search path is %s.",DATAsur);
// if (PathAdd(DATA, "", FULL, BEFORE) < 0) then
// MessageBox ("Unable to add DATA Path to path buffer.", SEVERE);
// abort;
// endif;
// PathGet (DATAsur);
//SprintfBox (INFORMATION,TITLE,
// "DATA Path added before first path.\n\nThe search path is %s.",
// DATAsur);
TARG = INSTALLDIR^"Database";
// SOURCE = SRCDISK^"test";
// LaunchAppAndWait(SRCDIR^"path.bat",SOURCE,WAIT);

if (LaunchAppAndWait(INSTALLDIR^"Database\\install.bat",TARG,LAAW_OPTION_WAIT |
LAAW_OPTION_HIDDEN) < 0) then
MessageBox ("Unable to launch install.bat",SEVERE);
endif;
//Delay(1);
// LaunchAppAndWait(INSTALLDIR^"createdb.bat",TARG,LAAW_OPTION_WAIT);
//Delay(2);
// LaunchAppAndWait(SRCDISK^"test//sqlscript//setup.bat",TARG,LAAW_OPTION_WAIT);
// Delay(2);
// LaunchAppAndWait(SRCDISK^"test//sqlscript//importdb.bat",TARG,LAAW_OPTION_WAIT);
end;
//---------------------------------------------------------------------------
// The UnInstalling event is sent just before the feature
// DefaultFeature is uninstalled.
//---------------------------------------------------------------------------
#define UNINSTALL_BAT INSTALLDIR^"Database\\deinstall.bat"
#define UNINSTALL_BAK "deinstall.bak"
export prototype DefaultFeature_UnInstalling();
function DefaultFeature_UnInstalling()
STRING TARG,SOURCE;
STRING DBPATH,DATA,DATAsur,TITLE;
begin
// Load the batch file to be edited.
if (BatchFileLoad (UNINSTALL_BAT) < 0) then
MessageBox ("Unable to load " + EXAMPLE_BAT+".", SEVERE);
abort;
endif;
DBPATH = SRCDISK + "\\";
// Add the line SET PATH = SRCDISK^"test".
if (BatchAdd ("SOURPATH", DBPATH, "", BEFORE) < 0) then
MessageBox ("Second call to BatchAdd failed", WARNING);
abort;
endif;

// Save the updated file; back up the original file.
if (BatchFileSave(UNINSTALL_BAK) < 0) then
MessageBox ("Unable to save " + UNINSTALL_BAK + ".", SEVERE);
//else
// MessageBox ("Batch file saved. Backup created.",INFORMATION);
endif;
//DATAsur = "C:\\";
//DATA = SRCDISK^"test";
// TITLE = "Path buffer example";
// PathSet (DATAsur);
//SprintfBox (INFORMATION,TITLE,
// "The starting search path is %s.",DATAsur);
// if (PathAdd(DATA, "", FULL, BEFORE) < 0) then
// MessageBox ("Unable to add DATA Path to path buffer.", SEVERE);
// abort;
// endif;
// PathGet (DATAsur);
//SprintfBox (INFORMATION,TITLE,
// "DATA Path added before first path.\n\nThe search path is %s.",
// DATAsur);
TARG = INSTALLDIR^"Database";
// SOURCE = SRCDISK^"test";

// LaunchAppAndWait(SRCDIR^"path.bat",SOURCE,WAIT);
if (LaunchAppAndWait(INSTALLDIR^"Database\\deinstall.bat",TARG,LAAW_OPTION_WAIT |
LAAW_OPTION_HIDDEN) < 0) then
MessageBox ("Unable to launch deinstall.bat",SEVERE);
endif;
end;

下一篇: 解决卸载时残留目标文件夹的问题

posted on 2014-08-19 17:25 NET未来之路 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/lonelyxmas/p/3922627.html

IS2009制作Oracle 静默安装包(二) 感谢空白先生特许授权相关推荐

  1. 制作CPA静默安装包和静默包软件捆绑方法

    制作CPA静默安装包 iexpress  : https://jingyan.baidu.com/article/72ee561aa7de29e16138dfb0.html 静默包软件捆绑方法 1.s ...

  2. Silent Install Builder制作静默安装包实现软件自动部署

    Silent Install Builder 5制作静默安装包实现软件自动部署(部分软件不支持脚本录制安装) 第一步下载安装 地址https://apreltech.com/SilentInstall ...

  3. 使用inno setup制作静默安装包

    概述 大家可能平时深有体会,电脑隔一段时间就会被安装几个流氓软件.但我们明明没有手动去安装,这些是什么时候偷偷安装上去的.主要还是由于,我们安装某些软件时,它会捆绑安装一些软件,还有就是,点击一些钓鱼 ...

  4. Advenced Installer制作C#程序安装包过程.Net和Visual C++采用静默安装配置说明

    在制作C#程序安装包时,需要安装.Net Framework和Visual C++运行库文件.若采用一般安装模式会弹出安装界面,让用户点击确定进行安装,若用户选择出错会导致程序无法正常运行.给软件的运 ...

  5. CPA制作自动下载静默包php,超详细揭秘可日赚千元的CPA静默安装包制作方法

    你是否有过去网上下载东西,结果下了一大堆"垃圾"经历? 心里是否吐槽着:这些人是不是吃饱了撑的,传那么一大堆垃圾上去干嘛?不!他们并不是吃饱了撑的 一个下载可能就是块把钱,可别小看 ...

  6. 如何制作绿盾终端静默安装包

    前言:静默安装包,是指双击后没有安装界面,直接连接指定的服务器地址和端口来进行安装的安装包.主要用在域推送安装和需要更改端口的安装(比如公司没有公网IP,用花生壳内网穿透来实现外网连接,端口会变掉). ...

  7. [转]英文版VS2010制作中文环境安装包

    本文转自:http://www.cnblogs.com/upupto/archive/2010/10/29/1864726.html 自从VS2010发布以来,一直在用英文版本,接下来就说明用英文版本 ...

  8. Advanced Installer 制作.NetWeb部署安装包

    Advanced Installer 制作.NetWeb部署安装包 原文:Advanced Installer 制作.NetWeb部署安装包 因为是.Net的Web应用程序,所以想用Advanced ...

  9. InstallAnywhere制作出来的安装包在64位机上无法卸载

    使用InstallAnywhere 2009的用户,在制作64位平台安装包时,可能会遇到制作出来的安装包无法卸载,并且这种情况仅限于带64位JVM的安装包. 解决办法: 在InstallAnywher ...

最新文章

  1. python字典新的定义方式
  2. php后台和ios网络请求,iOS网络 POST通过JSON传数据到后台
  3. 开发中常见的Oracle三大故障与调优方法
  4. 2016年第5本:必然
  5. 管家婆服务器备份文件夹,[任我行]管家婆软件的使用方法,管家婆辉煌提示备份报错3202...
  6. vray uneal插件试用版 license 安装过程
  7. 迅速学tar命令对文件的打包压缩与解压缩
  8. 有些打不开的国外网页
  9. python之“太空大战”小游戏实现
  10. 一套牛逼哄哄的开源的监控系统(附源码)
  11. 微信公众平台开发入门教程(图文)
  12. freemarker(FTL)常见语法大全
  13. 决策树,逻辑回归,PCA-算法面经
  14. 铲屎官期盼已久的电影终于来啦!~
  15. 冯登国院士:关键信息基础设施安全保护的三个视角
  16. 微信群分享:Python网络爬虫初探
  17. 移动端适配-flexible.js使用(解决对外部引入css,px2rem能不能转换rem问题)
  18. charles抓app数据包
  19. 六月的英语计算机考级成绩查询,【CET查询】_CET成绩查询
  20. [附源码]计算机毕业设计springboot行程规划app

热门文章

  1. 安卓 android:windowsoftinputmode,Android:windowSoftInputMode="adjustResize"无效解决方法
  2. 堕落小白的前台sql注入cms代码审计
  3. pstack命令学习
  4. idea中的markdown文档如何插入图片
  5. 傅里叶变换基本概念及复数类实现
  6. sqoop 1.4.4-cdh5.1.2快速入门
  7. Python提取数字图片特征向量
  8. K-means聚类算法详解
  9. 快速理解Spark Dataset
  10. Dubbo学习总结(2)——Dubbo架构详解