不知道你是否注意過,當你安裝java jdk的時候,當你安裝微軟office的時候,當你裝db2的時候,你都會看到一個熟悉的標記---installshield。installshield可以說是當今安裝程序解決方案的巨無霸了,功能十分強大,你可以用它制作出你想要的安裝程序。但是功能的強大也帶來一個壞處,就是要上手非常難。所以公司特意請macrovision(就是制作installshield的公司)的人給我們進行了一個training,感覺收獲還是很大的,所以把我認為重要的地方紀錄下來,一方面萬一自己忘了可以查一查,另一方面說不定對別人也有幫助。
先從版本說起。installshield有專門用于制作java安裝程序的產品,由于java是跨平臺的語言,所以installshield對應的產品就叫installshield multiple platform,簡稱ismp。我接觸的最早版本是ismp 5.0,后來又出了ismp 11.5,再后來ismp改名字叫Install Anywhere(以下簡稱IA)。目前我們training用的版本是IA 8.0,相信應該是最新的版本了。IA是共享軟件,不注冊的話有21天的試用期。
安裝程序是一個可定制性非常強的東西,每個軟件作者的需求都不一樣。有的推崇簡單就是美,一般只需要用戶選擇安裝的目錄,然后就一路next就裝完了;但有的軟件非常復雜,比如需要設置參數,需要選擇安裝哪些部分,甚至需要啟動windows的系統服務。這時候就需要比較復雜的配置了。installshield針對兩種用戶設計了不同的開發環境:一種是common designer,另一種是Advanced Designer。當你第一次打開IA的時候,缺省的是common designer,你只需要做一些簡單的配置,比如產品的名稱,需要安裝的文件,要不要綁定虛擬機等等,然后就可以build出一個安裝程序了。Advanced Designer是為高級用戶設置的,提供了更多,更豐富的功能,你可以用它來打造你所需要的安裝程序。本文主要是針對Advanced Designer進行一些說明。
1)安裝模式(install modes)
gui:這是最常用的一種模式,在安裝過程中會彈出若干個panel,比如welcome panel,license panel,destination panel等等。
console:用這種模式安裝程序時,不會出現panel。它的所有信息都在控制臺中出現。說的再通俗一點,就是整個安裝過程只有一個dos窗口,這個窗口先會顯示一行信息歡迎你安裝本軟件,然后是讓你選擇destination,再安裝,最后會顯示一行安裝成功的信息
silent:顧名思義,這種模式在安裝的時候不會彈出任何窗口,它會安靜地裝上軟件,所以用戶也不能自己設定安裝目錄,一般都市由安裝程序安裝到固定的目錄上
2)install sets
很多安裝程序都有完全安裝,最小安裝,自定義安裝等選項,這一般是用features來實現的。你可以把你的產品分成幾個features,然后由用戶來選擇一部分進行安裝。
3)actions
IA中很多操作被稱為actions,常見的有copy files,delete files,modifying registry, creating service, modifying configurations files等
4)variable
IA中很重要的一個概念,你可以用variable來存放屬性信息,比如安裝目錄,用戶名等等。比如
安裝目錄可能會在很多地方都用到,如果你安裝目錄是硬編碼的,萬一將來要修改就要改
很多地方,容易出錯;如果用variable來保存的話,只要修改變量值就可以了。注意一點:variable
的值基本上都是string類型的
5)magic folders
IA里面獨有的概念,但感覺沒什么新意,就是variables的一種,專門用于定義folder的
variable而已
6)InstallAnywhere registry
不同于windows的registry,這是InstallAnywhere自己的registry。每個用IA制作的安裝程序,在安裝的過程中
都會把自己注冊到這個InstallAnywhere registry(注意:你只能在InstallAnywhere registry找到安裝的
component,找不到product)。它的一個典型應用就是當你需要檢查這個機器上是否安裝過某個軟件的時候,就可以
用search這個IA registry。不過如果你是用其他工具制作的安裝程序,IA registry就不會有記錄了。
7)execute command&execute script
execute command是用來執行command,常用的dos命令(copy,cd等)你都可以寫在這里。execute script其實就是
execute command的加強版:如果你有多個命令,不需要建多個execute command,把它們寫在execute script就好了
8)計算所需空間
在IA中,默認的空間大小是用byte來計算的,所以如果你的軟件比較大的話,那一長串的阿拉伯數字會把用戶嚇倒的
解決方法是,在pre-install summary panel的配置項中,有一個是Edit Custom Field。在那里新建一個field。Variable
name是顯示給用戶看的內容,比如你可以寫disk space。variable value是你的軟件所需的硬盤大小。你可以先算出來
,存在一個變量中,然后讓variable value等于這個變量就可以了。
9)results variable
用來存放用戶的選擇。比如在show message dialog中,有一個results variable是$CHOSEN_DIALOG_BUTTON$
它用來存放用戶按的是OK 還是Cancel
很多人在開發RCP時,發現開發時都沒問題,但導出成包時卻報找不到第三方庫中類的錯誤。主要原因就是沒有將第三方庫配置好。現在我給出一個實現項目的配置為示例,以供參考。 原文出處:http://www.eclipseworld.org/bbs/read.php?tid=1133 環境:Eclipse3.2M3 一個RCP的實際項目
一、
最關鍵的就是plugin.xml和MANIFEST.MF 所有界面上的最后操作,結果都是保存在這兩個文件中。注意:“.classpath”文件只是開發時對引用第三庫有用,打包發行之后它的作用就沒有了,還得靠plugin.xml和MANIFEST.MF。
1、plugin.xml文件
<?xml version="1.0" encoding="GB2312"?>
<?eclipse version="3.0"?>
<plugin>
?? <extension
???????? id="AdminConsole"
???????? point="org.eclipse.core.runtime.applications">
??????? <application>
??????????? <run class="com.wxxr.management.admin.console.AdminConsole"/>
??????? </application>
?? </extension>
?
?? <extension id="AdminConsole" point="org.eclipse.core.runtime.products">
? <product name="%productName" application="com.wxxr.management.admin.console.AdminConsole">
?? <property name="appName" value="%swtAppName"/>
?? <property name="windowImages" value="icons/eclipse.gif,icons/eclipse32.gif"/>
?? <property name="aboutText" value="%aboutText"/>
?? <property name="aboutImage" value="icons/eclipse_lg.gif"/>
?? <property name="windowImages" value="icons/alt16.gif,icons/eclipse.gif"/>
? </product>
?? </extension>
??
?? <extension
????? point="org.eclipse.ui.perspectives">
????? <perspective
??????????? class="com.wxxr.management.admin.console.monitor.MonitorPerspective"
??????????? name="%perspectiveName"
??????????? id="com.wxxr.management.admin.console.monitor.MonitorPerspective"/>
????? <perspective
??????????? class="com.wxxr.management.admin.console.configure.ConfigurePerspective"
??????????? name="%configurePerspectiveName"
??????????? id="com.wxxr.management.admin.console.configure.ConfigurePerspective"/>
????? <perspective
??????????? class="com.wxxr.management.admin.console.jmx.JMXPerspective"
??????????? name="%jmxPerspectiveName"
??????????? id="com.wxxr.management.admin.console.jmx.JMXPerspective"/>
?? </extension>
?<extension
?? point="org.eclipse.ui.editors">
?? <editor
?? name="事件列表"
?? icon="icons/alt16.gif"
?? class="com.wxxr.management.admin.console.log.ui.LogEditor"
?? id="com.wxxr.management.admin.console.log.ui.LogEditor">
?? </editor>
?? <editor
?? name="地圖"
?? icon="icons/map_view.gif"
?? class="com.wxxr.management.admin.console.map.MapEditor"
?? id="com.wxxr.management.admin.console.map.MapEditor">
?? </editor>
?</extension>
?? <extension
???????? point="org.eclipse.ui.views">
????? <category
??????????? id="com.wxxr.management.admin.console.monitor.view"
??????????? name="%views.category.name"/>
????? <view
??????????? id="com.wxxr.management.admin.console.navigator.ui.StationExploreView"
??????????? name="工作站"
??????????? icon="icons/eclipse.gif"
??????????? class="com.wxxr.management.admin.console.navigator.ui.StationExploreView"
??????????? category="com.wxxr.management.admin.console.monitor.view"/>
????? <view
??????????? name="事件細節"
??????????? icon="icons/eclipse.gif"
??????????? category="com.wxxr.management.admin.console.monitor.view"
??????????? class="com.wxxr.management.admin.console.monitor.eventview.EventDetailView"
??????????? id="com.wxxr.management.admin.console.monitor.eventview.EventDetailView" />
????? <view
??????????? name="事件統計"
??????????? icon="icons/eclipse.gif"
??????????? category="com.wxxr.management.admin.console.monitor.view"
??????????? class="com.wxxr.management.admin.console.monitor.view.SystemEventStatisticsView"
??????????? id="com.wxxr.management.admin.console.monitor.view.SystemEventStatisticsView" />
????? <view
??????????? name="緊急事件處理"
??????????? icon="icons/eclipse.gif"
??????????? category="com.wxxr.management.admin.console.monitor.view"
??????????? class="com.wxxr.management.admin.console.emergency.ui.EmergencyEventReceiverView"
??????????? id="com.wxxr.management.admin.console.emergency.ui.EmergencyEventReceiverView" />
????? <category
??????????? id="com.wxxr.management.admin.console.jmx.view"
??????????? name="%views.category.name"/>
????? <view
??????????? name="JMX Connections"
??????????? icon="icons/eclipse.gif"
??????????? category="com.wxxr.management.admin.console.jmx.view"
??????????? class="com.wxxr.management.admin.console.jmx.ui.JMXExploreView"
??????????? id="com.wxxr.management.admin.console.jmx.ui.JMXExploreView" />
????? <view
??????????? name="JMX Attributes View"
??????????? icon="icons/eclipse.gif"
??????????? category="com.wxxr.management.admin.console.jmx.view"
??????????? class="com.wxxr.management.admin.console.jmx.ui.AttributesView"
??????????? id="com.wxxr.management.admin.console.jmx.ui.AttributesView" />
????? <view
??????????? name="JMX Operations View"
??????????? icon="icons/eclipse.gif"
??????????? category="com.wxxr.management.admin.console.jmx.view"
??????????? class="com.wxxr.management.admin.console.jmx.ui.OperationsView"
??????????? id="com.wxxr.management.admin.console.jmx.ui.OperationsView" />
????? <view
??????????? name="JMX MBean View"
??????????? icon="icons/eclipse.gif"
??????????? category="com.wxxr.management.admin.console.jmx.view"
??????????? class="com.wxxr.management.admin.console.jmx.ui.MBeanView"
??????????? id="com.wxxr.management.admin.console.jmx.ui.MBeanView" />
?? </extension>
?? <extension
???????? id="AdminConsole"
???????? point="org.eclipse.core.runtime.products">
????? <product
??????????? application="com.wxxr.management.admin.console.AdminConsole"
??????????? name="AdminConsole"/>
?? </extension>
??
</plugin>
?
2、
META-INF\MANIFEST.MF文件
??? 注意:(1)這里require-bundle定義了項目依賴的插件。
(2)Bundle-ClassPath定義了引用的第三方庫,別忘了把AdminConolse項目自己console.jar加進去,否則連自己項目里的類都會找不到。
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: com.wxxr.management.admin.console; singleton:=true
Bundle-Version: 1.0.0
Bundle-Activator: com.wxxr.management.admin.console.AdminConsolePlugin
Bundle-Localization: plugin
Require-Bundle: org.eclipse.ui,
?org.eclipse.core.runtime,
?org.eclipse.core.resources,
?org.eclipse.gef,
?org.eclipse.ui.forms,
?org.eclipse.ui.console
Eclipse-AutoStart: true
Bundle-Vendor: %providerName
Bundle-ClassPath: console.jar,
?lib/commons-codec-1.3.jar,
?lib/jboss.jar,
?lib/jbossall-client.jar,
?lib/jboss-jmx.jar,
?lib/jboss-system.jar,
?lib/log4j-1.2.8.jar,
?lib/wxxr-common-1.0-b1.jar,
?lib/wxxr-common-jboss-1.0-b1.jar,
?lib/wxxr-db-persistence-1.0-b1.jar,
?lib/wxxr-jboss-controller-1.0-b1.jar,
?lib/wxxr-jboss-workstation-1.0-b1.jar,
?lib/wxxr-remoting-1.0-b1.jar,
?lib/wxxr-security-1.0-b1.jar,
?lib/xerces-2.6.2.jar,
?lib/xmlParserAPIs-2.2.1.jar,
?lib/xmlrpc-2.0.jar
?3、build.properties文件。
這個文件主要是用Eclipse導出包的時候用。
source.console.jar = src/
output.console.jar = bin/
bin.includes = plugin.xml,\
?????????????? *.jar,\
?????????????? console.jar, \
?????????????? plugin.properties
??????????????
pluginName = Admin Console Plug-in
providerName = WXXR.com.cn
perspectiveName = Admin Console
configurePerspectiveName= Configure
jmxPerspectiveName= JMX Console
??????????????
jars.extra.classpath = lib/commons-codec-1.3.jar,\
?????????????????????? lib/jboss.jar,\
?????????????????????? lib/jbossall-client.jar,\
?????????????????????? lib/jboss-jmx.jar,\
?????????????????????? lib/jboss-system.jar,\
?????????????????????? lib/log4j-1.2.8.jar,\
?????????????????????? lib/wxxr-common-1.0-b1.jar,\
?????????????????????? lib/wxxr-common-jboss-1.0-b1.jar,\
?????????????????????? lib/wxxr-db-persistence-1.0-b1.jar,\
?????????????????????? lib/wxxr-jboss-controller-1.0-b1.jar,\
?????????????????????? lib/wxxr-jboss-workstation-1.0-b1.jar,\
?????????????????????? lib/wxxr-security-1.0-b1.jar,\
?????????????????????? lib/wxxr-remoting-1.0-b1.jar,\
?????????????????????? lib/xerces-2.6.2.jar,\
?????????????????????? lib/xmlParserAPIs-2.2.1.jar,\
?????????????????????? lib/xmlrpc-2.0.jar
4、plugin.properties,這個放一些上面幾個文件用到的變量。
pluginName= WXXR Admin Console
providerName= wxxr.com.cn
?
productName= WXXR SMS Operation Platform
appName= WXXR Admin Console
perspectives.browser.name= WXXR Admin Console
views.category.name= WXXR Admin Console
views.browser.name= Browser
views.history.name= History
views.stationexplore.name= Stations
views.tasklist.name= Task List
views.loglist.name= Workstation Monitor
monitor.message.detail=Monitor Message Detail
monitor.message.statistics=????
?
swtAppName= AdminConsole
aboutText= WXXR Admin Console \n\n\
(c) Copyright WXXR Ltd. and others 2003, 2004.? All rights reserved.\n\
Visit
http://www.wxxr.com.cn?二、圖形方式 有時直接編輯plugin.xml等文件容易出錯(全角空格什么的),那么可以用圖形編輯方式來,不過最后結果還是反映到plugin.xml等文件中的。我把plugin.xml打開,然后一個項一個項的把圖截下來,以供大家參考。