`
talin2010
  • 浏览: 501508 次
  • 性别: Icon_minigender_1
  • 来自: 河北
社区版块
存档分类
最新评论

InstallAnyWhere学习笔记 ( by quqi99 )

阅读更多

InstallAnyWhere学习笔记 ( by quqi99 )

作者:张华 发表于:2009-12-23

版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明

目前,由于工作需要,需要将程序在windows, hp-ux, aix, solaris-x86, solaris-sparc平台上打包,跨平台的打包工具当然是

InstallAnyWhere了,下面是使用它的过程中需要注意的地方。

由于不同的平台使用的代码不一样,那样我需要依据不同的平台去copy相应的依赖包,所以我必须从InstallAnyWhere里

知道何种操作系统,虽然通过变量 $prop.os.name$ 我可以知道平台名称 (InstallAnyWhere的标准变量可参见,http://helpnet.flexerasoftware.com/robo/projects/installanywhere%207.1%20help%20library/Standard_InstallAnywhere_Variables.htm),但是在window平台里取出的却是"Windows 2003“之类的字眼,显示后面的

2003不是我想的,我需要截取字符串,但是却找不着相应的函数,所以这也是InstallAnyWhere功能不足地方,在这点上,

SetupFactory显然要比它强得多,只不过 SetupFactory做出的安装包无法跨平台。研究了近半天,没有思路,后来我想到了

JAVA,也就是我将所有的安装过程全部在JAVA里做,在JAVA代码中去获取OS名称,去执行maven命令,去复制,删除文件等等。。客户化代码实际上很简单,步骤如下:

1) 将InstallAnyWhere安装目录下的IAClasses.zip加入到classpath中。

2) 继承CustomCodeAction类,实现install方法,如:

public class ModifyString extends CustomCodeAction
{

public void install(InstallerProxy ip) throws com.zerog.ia.api.pub.InstallException
{
//参数的传入以InstallAnyWhere的变量传入
String path = ip.substitute("$MS_STRING_TO_CONVERT$");

//在这里通过JAVA代码你想做什么做什么

//程序结果通过变量传出


ip.setVariable("MS_STRING_TRIM", path.trim());

}

像上面那样做就可以可以通过调用Custom Code功能调用了。如果我们还想做成插件的话,就要在classpath根目录下新建一个customcode.proprties文件,内容为

plugin.main.class=com.zerog.ia.customcode.utils.ModifyString
plugin.name=ModifyString
plugin.type=action
plugin.available=preinstall,install, postinstall,preuninstall, postuninstall
property.MS_STRING_TO_CONVERT=

如果是插件,打成JAR包后,要放到D:\Program Files\InstallAnywhere2009Enterprise\plugins目录下。

3)打成JAR包。

4)使用时,在添加action里有“添加custom code“这一项吧,将定这个JAR包,并指定主类指可。如果如了第三方依赖包,在

dependency中设置。如果是插件,放到 D:\Program Files\InstallAnywhere2009Enterprise\plugins目录下,在action中直接用就行了。

既然可以通过JAVA来做任何安装要做的事情,现在剩下的事情就是需要JDK环境,在http://www.flexerasoftware.com/products/installanywhere/files-utilities.htm里有各个操作系统平台上的VM,下载下来,放到D:\Program Files\InstallAnywhere2009Enterprise\resource\installer_vms目录下去,然后重启InstallAnyWhere,你就会发现在“Build"菜单里看到这些JDK了。当然,这些VM

你也可以自己做,你将后缀改成zip,用winwar打开,你一看就知道这些VM怎么做了,非常非常简单的。

最后需要注意的就是变量了,如想跨平台,文件分隔符就得用 $/$ or $\$ , 环境变量里的分隔符得用

$;$ or $:$ ,更多的标准变量可参见:http://helpnet.flexerasoftware.com/robo/projects/installanywhere%207.1%20help%20library/Standard_InstallAnywhere_Variables.htm

其他注意点:

1)修改图标,有四处:

1、显示“语言选择”处的欢迎页,Install UI --Look & Feel -- General UI Settings -- Startup Spalash Screen

2、安装界面左边的背景,Install UI --Look & Feel -- General UI Settings -- Installer Background Image

3、安装界面右边的图片,Install UI --Billboards

2)添加安装集:

1、Organization -- Install Sets : 如Complete Installation 与Documentation-only Installation两个

2、Organization -- Features与Install Sets关联,如Sever与Doc两个Feature

3、Install面板中将文件夹docs与Feature Server关联,其余文件与Feature Doc 关联

3、在Install时得添加Pre-Panel, Choose Install Sets


在使用InstallAnyWhere之后,我觉得它不怎么样,缺点如下:

1)有时候往往不同的OS有不同的安装文件,它无法根据不同的OS解压相应的文件,而是整个将文件全拷到用户机器上,这点它有点弱。

(补充一下:后来熟练之后,知道了可以通过Rules解决

2)虽然它可以通过变量取得操作系统名称,但是取出的却是windows 2003之类的,所以需要进行字符串截取,

而它却没有进行字符串截取的函数,虽然可以通过Custom Code加以解决,却还是显得功能弱,起码也得像SQL语句那样吧

3)小问题不断,如修改文本文件的action无法存在跨平台行换行符的问题,搞得我后来只能通过Custom Code加以解决了

当然 InstallAnyWhere也有很多优点,如下:

1)支持多OS平台,如linux上生成的bin包也可以以GUI形式运行(直接双击,再点运行即可出来JAVA的图形化界面)

2)支持JAVA扩展,Custom Code,这点不错。


下面是我自己做了一个linux下的BIN包,不过只支持Cosole安装,不支持图形化界面:

1) 新建一个脚本install.sh,内容如下:

#!/bin/bash

installDir=${PWD}

if [ X$1 != "X" ];then

installDir=$1;

fi

mkdir $installDir

sed -n -e '1,/^exit 0$/!p' $0 > "${installDir}packages.tar.gz 2>/dev/null

cd $installDir

tar zxf packages.tar.gz

tar zxf vm.tar.Z

JAVA_HOME=./jre

export JAVA_HOME

chmod -R 777 ./jre/bin/*

./jre/bin/jar -xf quqi.jar

chmod 777 ./lib/ant/bin/ant

./lib/ant/bin/ant -f ant.xml

rm -f ant.xml

exit 0

2)存在两个文件quqi.jar与vm.tar.Z,quqi99.jar是我们要安装的文件,vm.tar.Z是JDK

先通过下列命令将上述两个文件打成包packages.tar.gz

tar zcvf packages.tar.gz bes.jar vm.tar.Z

3)执行命令 cat install.sh packages.tar.gz > install.bin

这样将install.sh与packages.tar.gz文件合在一起install.bin,并且install.sh在前

而脚本中的命令 sed -n -e '1,/^exit 0$/!p' $0 > "${installDir}packages.tar.gz 2>/dev/null

用于将packages.jar再从install.bin中提取出来,sed命令代表一行一行的读,

/^exit 0$/代表读到以exit开头,0结尾的一行,有点类似正则

1,/^exit 0$/代表从1到exit 0的这些行

p代表打印,

!代表非

所以 '1,/^exit 0$/!p'代表打印除了1到exit 0的行,也就是packages.tar.gz的内容了。

> "${installDir}packages.tar.gz 代表写入到文件中,

2>/dev/null则代表写文件时不输出信息

4)安装时可以这样 ./install.bin /home/zhanghua/test

补充经验:

1)silent安装模式:

定义一个配置文件installer.properties,内容如下:

INSTALLER_UI=SILENT

USER_INSTALL_DIR=c:\\test

CHOSEN_INSTALL_SET=mySet1

.....

调用方式: install.exe -f installer.properties

2)Console安装模式

调用方式:install.exe -i console

另外,在添加Panel时,得添加Console专用的Panel

注意:并且Console模式下定义输入参数时,多个参数共用一个变量,变量的值类似 "aa","bb" ,其中aa为参数标签名,

并且aa上还有两个逗号,这个在使用过程中是不便的,尤其由于在执行完Pre-Install(主要是Panel)后才执行Install(主要是action)


这样会导致Panel与Action中的使用模式不一致哦。这也是installanywhere大问题没有,小问题不断的一个例子,看来一个软件产品

采用让大家多提意见对改善易用性是很有好处的。

3)关于卸载软件,在安装过程中生成的文件,installanywhere不会给我们 卸载的,那我们可以在我们的Cumstom Code Action

中的uninstall方法中 卸载 :

public static void delDir(File f) throws Exception{

f(f.exists()){

File[] subFiles = f.listFiles();

if(subFiles.length==0){

f.delete();

}else{

for(int i=0;i<subFiles.length;i++){

File subFile = subFiles[i];

if(subFile.isDirectory()){

delDir(subFile);

}

subFile.delete();

if(subFile.getparentFile().list().length==0)

subFile.getParentfile().delete();

}

}

}

}

不过在uninstall中调用它时可要注意一点,不要直接调这个方法直接删除我们安装根目录哦(因为

installanywhere工具自身的 卸载在根目录下,你这样一删,会造成删除不干净的),切记切记。

4)如果要校验数据的话,例如,如何用户输入的IP不对,让安装的下一步不可用怎么做呢?

可以在Pre-Install上使用Show Message Dialog这个内置Panel,注意一定是要在 Pre-Install中使用,不能在

Install中使用,因为在Install中一旦安装正在进行是没法让Panel回到Previous的,在这个 Show Message Dialog上

使用它的Rules中通过Evaluate Custom Rule添加一个自定义的Rule,自定义的Rule如下:

public class DataVerify extends CustomCodeRule{

public boolean evaluateRule(){

}

}

5)locale修改,在工程的目录下有两个文件custom_en, custom_zh_CN,直接修改即可。蛮简单。可以这样:

在做安装文件的时候,直接写英文,做完之后,只修改 custom_zh_CN这一个文件,翻译即可。

6)关于输入框的问题,比如说一个输入Panel上有两个radio,它存储在一个变量INSTLL_TYPE中,那么会出现下列变量:

INSTALL_TYPE=\"",\"Advanced\"

INSTALL_TYPE_1=

INSTALL_TYPE_2=Advanced

INSTALL_TYPE_TYPE_BOOLEAN_1=0

INSTALL_TYPE_TYPE_BOOLEAN_2=1

显然,如果locale化的话,不应该用到label的值,所以得用 INSTALL_TYPE_TYPE_BOOLEAN

installanywhere很多细节地方做的不大好,如下:

1)它最大的败笔就是对console,silent,swing三种安装模式的变量处理的不一致,比如说由于有swing中上述第6)点问题的存在

,在silent模式时,你若直接使用 INSTALL_TYPE_TYPE_BOOLEAN_1是不行的,它会给你重置,它还是得在silent的配置文件中

使用 INSTALL_TYPE,然后 在custom code代码反重置 INSTALL_TYPE_TYPE_BOOLEAN_1变量。

2) 它最大的败笔就是对console,silent,swing三种安装模式的变量处理的不一致。比如说两上checkbox,

它在swing模式时有两个变量与之对应,而在console中却有一个变量与之对应,这样造成很多不便,你得自己去拆解

3)它的rule不支持小括号等复杂的逻辑表示,这方面的功能过弱。

4)它的rule还有一个败笔,它估计是异步执行的,如果执行一个rule时间很长,它可能自己就先返回了。

5)它所有的输入panel无法排版,连超码的对齐都没有,只能通过空格来对齐。

6)在console模式中,它的install set估计有BUG,我有两个feature,一个是应用,一个是文档,当我选文档时

,它实际上安装的是应用,当我选应用时它安装的是文档。首先我能保证我的做法是没有问题的,那么那就只能是installanywhere的BUG了

7)在swing模式中,一个panel中可以定义多个元素,而在console中,由于一个panel只能定义一个变量,所以它也只能定义

一个元素,这样造成panel激增。

怎么说了,installanywhere给我的印象是它的功能挺不错,但是它不怎么注重细节,大问题没有,小问题却不断,并且是它本来

是可以做好的,如输入框没有对齐功能的问题,但它却不去做。真不知道开发这输入框的这个哥们究竟是怎么想的,它难道就没有考虑到

这样做对用户相当不友好吗?


分享到:
评论
1 楼 overkill 2011-05-26  
你好,我在使用InstallAnywhere的silent安装时,遇到一个问题。当有一个Message Dialog上有两个button,一个是继续,一个是退出,那么silent安装怎么知道点击哪个button呢,我测试了很多次,感觉它不会去点击button,而是直接执行下面的动作,请问楼主有什么好建议呢?

相关推荐

    quqi.rar_mtk_mtk software_mtk平台

    MTK平台的多功能下載軟件,適用所有MTK手機....

    视频播放源代码directshow开发

    用directshwo开发的视屏播放器,比较简单,有时候会出错

    dm8_setup_win64_ent_8.1.1.45_20191121.iso

    国内最好的数据库达梦DM8,曲奇网盘下载链接:https://quqi.com/s/1243222/wcOZdaWgUlHrwhOk

    #这是一篇关于 LabVIEW 介绍说明、使用技巧和优缺点对文章

    labview

    重庆大学数字电子技术试题.pdf

    重庆大学期末考试试卷,重大期末考试试题,试题及答案

    重庆大学2012电磁场考题(A)参考答案及评分标准.pdf

    重庆大学期末考试试卷,重大期末考试试题,试题及答案

    5G智慧港口解决方案.pptx

    在现有省、市港口信息化系统进行有效整合基础上,借鉴新 一代的感知-传输-应用技术体系,实现对码头、船舶、货物、重 大危险源、危险货物装卸过程、航管航运等管理要素的全面感知、 有效传输和按需定制服务,为行政管理人员和相关单位及人员提 供高效的管理辅助,并为公众提供便捷、实时的水运信息服务。 建立信息整合、交换和共享机制,建立健全信息化管理支撑 体系,以及相关标准规范和安全保障体系;按照“绿色循环低碳” 交通的要求,搭建高效、弹性、高可扩展性的基于虚拟技术的信 息基础设施,支撑信息平台低成本运行,实现电子政务建设和服务模式的转变。 实现以感知港口、感知船舶、感知货物为手段,以港航智能 分析、科学决策、高效服务为目的和核心理念,构建“智慧港口”的发展体系。 结合“智慧港口”相关业务工作特点及信息化现状的实际情况,本项目具体建设目标为: 一张图(即GIS 地理信息服务平台) 在建设岸线、港口、港区、码头、泊位等港口主要基础资源图层上,建设GIS 地理信息服务平台,在此基础上依次接入和叠加规划建设、经营、安全、航管等相关业务应用专题数据,并叠 加动态数据,如 AIS/GPS/移动平台数据,逐步建成航运管理处 "一张图"。系统支持扩展框架,方便未来更多应用资源的逐步整合。 现场执法监管系统 基于港口(航管)执法基地建设规划,依托统一的执法区域 管理和数字化监控平台,通过加强对辖区内的监控,结合移动平 台,形成完整的多维路径和信息追踪,真正做到问题能发现、事态能控制、突发问题能解决。 运行监测和辅助决策系统 对区域港口与航运业务日常所需填报及监测的数据经过科 学归纳及分析,采用统一平台,消除重复的填报数据,进行企业 输入和自动录入,并进行系统智能判断,避免填入错误的数据, 输入的数据经过智能组合,自动生成各业务部门所需的数据报 表,包括字段、格式,都可以根据需要进行定制,同时满足扩展 性需要,当有新的业务监测数据表需要产生时,系统将分析新的 需求,将所需字段融合进入日常监测和决策辅助平台的统一平台中,并生成新的所需业务数据监测及决策表。 综合指挥调度系统 建设以港航应急指挥中心为枢纽,以各级管理部门和经营港 口企业为节点,快速调度、信息共享的通信网络,满足应急处置中所需要的信息采集、指挥调度和过程监控等通信保障任务。 设计思路 根据项目的建设目标和“智慧港口”信息化平台的总体框架、 设计思路、建设内容及保障措施,围绕业务协同、信息共享,充 分考虑各航运(港政)管理处内部管理的需求,平台采用“全面 整合、重点补充、突出共享、逐步完善”策略,加强重点区域或 运输通道交通基础设施、运载装备、运行环境的监测监控,完善 运行协调、应急处置通信手段,促进跨区域、跨部门信息共享和业务协同。 以“统筹协调、综合监管”为目标,以提供综合、动态、实 时、准确、实用的安全畅通和应急数据共享为核心,围绕“保畅通、抓安全、促应急"等实际需求来建设智慧港口信息化平台。 系统充分整合和利用航运管理处现有相关信息资源,以地理 信息技术、网络视频技术、互联网技术、移动通信技术、云计算 技术为支撑,结合航运管理处专网与行业数据交换平台,构建航 运管理处与各部门之间智慧、畅通、安全、高效、绿色低碳的智 慧港口信息化平台。 系统充分考虑航运管理处安全法规及安全职责今后的变化 与发展趋势,应用目前主流的、成熟的应用技术,内联外引,优势互补,使系统建设具备良好的开放性、扩展性、可维护性。

    机械工程学位 Matlab.zip

    1.版本:matlab2014/2019a/2021a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    Matlab菌丝检测识别项目.zip

    提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

    基于django-xadmin的idc资产管理应用.zip

    基于django-xadmin的idc资产管理应用.zip

    电商数据分析.py

    电商数据分析.py

    头哥机组练习-第4关:16位快速加法器设计(计算机组成原理-谭志虎-华科大)

    头哥机组练习-第4关:16位快速加法器设计(计算机组成原理-谭志虎-华科大)

    Python实现春节烟花模拟介绍及代码示例.docx

    春节,作为中国最重要的传统节日之一,象征着团圆、喜庆和新的开始。烟花作为春节庆祝活动的重要元素,以其绚烂多彩、瞬间绽放的特点,给人们带来了无尽的欢乐和惊喜。然而,由于环境保护和安全的考虑,现实中烟花的燃放受到了诸多限制。因此,利用编程技术,模拟出春节烟花的效果,成为了一种新颖而有趣的方式。 本文将介绍一种基于Python编程语言的春节烟花模拟代码。通过简单的代码实现,我们可以创建出各种形态、颜色和动态效果的烟花,让人们在计算机屏幕上欣赏到一场别样的“烟花盛宴”。 一、代码介绍 该代码主要使用了Python的图形库pygame,以及random库来生成随机颜色和位置。pygame库是一个用于编写视频游戏的Python模块集,它可以创建窗口、绘制图形、处理键盘和鼠标事件等。random库则用于生成随机数,以模拟烟花的随机性和不确定性。 在代码中,我们定义了一个烟花类(Firework),包含烟花的初始位置、颜色、速度等属性,以及一个方法(update)用于更新烟花的位置和状态。然后,在主程序中,我们创建了一定数量的烟花对象,并在每一帧中更新它们的状态,同时在屏幕上绘制出来。 通过调整烟花类

    财务数据分析看版.xlsx

    Excel数据看板,Excel办公模板,Excel模板下载,Excel数据统计,数据展示

    social ski driver algorithm社会滑雪优化算法附matlab代码.zip

    1.版本:matlab2014/2019a/2021a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    辐射状系统配电网中的潮流解matlab代码.zip

    1.版本:matlab2014/2019a/2021a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    LabVIEW的概要分析与介绍

    LabVIEW(Laboratory Virtual Instrument Engineering Workbench)是一款由美国国家仪器公司(National Instruments)开发的图形化编程语言和开发环境,广泛应用于数据采集、控制系统、测试测量、科学研究等领域。以下是关于 LabVIEW 的资源描述: 开发环境和工具:LabVIEW 提供了一个直观易用的开发环境,允许用户通过拖放式的方式创建虚拟仪器(Virtual Instruments,简称VIs)并连接它们,构建复杂的控制和测量系统。LabVIEW 还提供了丰富的图形化编程工具和函数库,包括数据处理、信号分析、仪器控制等功能,极大地简化了开发过程。 图形化编程语言:LabVIEW 使用图形化编程语言 G(Graphical Programming Language)进行编程,采用了数据流编程模型,使得程序的逻辑结构更直观清晰。用户可以通过连接各种图形化的函数块(Node)来实现数据处理、控制逻辑等功能,无需编写复杂的代码,降低了学习和开发的门槛。 应用领域:LabVIEW 在科学研究、工程控制、教育培训等领域有着

    单片机实验或课设-定时器控制交通指示灯

    定时器控制交通指示灯 用C语言编写,也可以改成汇编

    城区智慧城市感知建设项目-设计方案(306页WORD).docx

    共建共享共治智慧城市感知系统,实现视频资源的集约化;视频感知,AI加持,构建视频AI资源池;融合感知数据与业务数据;实现城市状态的实时监测、城市异常的智能预警以及对事件的主动学习、预警和决策模型的自动训练,以数据和知识驱动实现城市日常治理、公共服务、应急处置和发展筹划等业务的可视化、智能化、可量化评估与持续优化,推动城市治理体系和治理能力现代化;从而有效支撑综合类业务及探索运营类业务。 在现有建设的基础上,补全前端多维信息感知设备包括路口交通感知、规范交通标示、人脸抓拍、信号控制等系统,为政府综合业务、承载城市运行管理、应急指挥、民生服务等业务,重点在运行监测、协同指挥、仿真决策、开放服务等方面,通过全面感知城市运行状态,实现城市日常运行管理以及突发事件应急联动指挥等全景指挥中心功能。

Global site tag (gtag.js) - Google Analytics