差異處

這裏顯示兩個版本的差異處。

連向這個比對檢視

Both sides previous revision 前次修改
下次修改
前次修改
java:installanywhere:upgrade:previous_version_detection [2018/11/30 23:27]
tony [如何偵測版本與安裝路徑?]
— (目前版本)
行 1: 行 1:
-====== How to detect previous version in InstallAnywhere?​ ====== 
-===== Problem ===== 
-軟體升級是維護產品必經之路,而透過安裝程式升級,幾乎是大家都會使用的方式。InstallAnywhere在Premier版本提供了Upgrade功能,可以透過以下方式啟用它:​\\ 
-{{:​java:​installanywhere:​upgrade:​ia_upgrade_setting_panel.png|}}\\ 
-\\ 
-接著可以透過Check Running Mode去確認是否是在執行Upgrade:​\\ 
-{{:​java:​installanywhere:​upgrade:​ia_check_running_mode_upgrade.png|}}\\ 
-\\ 
-對於安裝程式可以允許多個Feature各別安裝的使用者來說,在啟用這個功能後,相同版本就無法執行再次安裝了:​\\ 
-{{:​java:​installanywhere:​upgrade:​ia_cant_upgrade_msg.png|}}\\ 
-\\ 
-經過測試,在啟用Upgrade Mode後,Maintenance Mode沒有任何作用;面對這問題,我捨棄了IA所提供的Upgrade功能,自己去偵測是否要跑Upgrade流程。本篇文章主要分享我的心路歷程。\\ 
-(我們使用InstallAnywhere 2015 Premier) 
-===== How to? ===== 
-在Upgrade Mode中,有兩個很好用的變數可以讓你取到安裝於系統的軟體版本與路徑,分別為$IA_UPGRADE_BASE_VERSION$、$IA_UPGRADE_BASE_LOCATION$;但如果沒使用Upgrade Mode,你就只能靠自己了。接下來主要分享:​ 
-  * 如何偵測版本與安裝路徑?​ 
-  * 如何判斷是否要升級?​ 
-  * 如何延續前一次的安裝設定?​ 
-==== 如何偵測版本與安裝路徑?​ ==== 
-在Windows上通常都會使用registry,但Linux怎辦?​ IA在執行安裝完成後,會在系統中留下.com.zerog.registry.xml檔案,描述安裝資訊,其中就包含了版本與路徑。Linux我們可以在/​var底下找到這個檔案:​\\ 
-{{:​java:​installanywhere:​upgrade:​ia_registry_file.png|}}\\ 
-\\ 
-接著可以使用Read/​Modify XML File的Action,去把內容讀出來。首先是根據$PRODUCT_ID$去把對應的product標籤的位置讀出來:​\\ 
-{{:​java:​installanywhere:​upgrade:​ia_read_index_of_registry_file.png|}}\\ 
-\\ 
-然後可以透過這個index位置去把版本與安裝位置給讀出來,我提供版本部分就好,位置方法類似:​\\ 
-{{:​java:​installanywhere:​upgrade:​ia_read_product_version_of_registry_file.png|}}\\ 
-\\ 
-假如目標系統沒有安裝過你的軟體,取得的index會是空字串;如果在取得版本或安裝位置時,有可能會讓你讀到別人的產品內容。因此我們必須加Rule去避免這個問題:​\\ 
-{{:​java:​installanywhere:​upgrade:​ia_prevent_null_product_index.png|}} 
- 
- 
- 
-==== CustomCodeRule - HasPreviousVersionRule ==== 
-<code java> 
-package org.tonylin.practice.ia.customcode;​ 
- 
-import com.zerog.ia.api.pub.CustomCodeRule;​ 
- 
-public class HasPreviousVersionRule extends CustomCodeRule { 
- @Override 
- public boolean evaluateRule() { 
- String base_version = (String)ruleProxy.getVariable("​BASE_PRODUCT_VERSION"​);​ 
- if( base_version == null || base_version.isEmpty() ) { 
- return false; 
- } 
-  
- String installer_version = (String)ruleProxy.getVariable("​PRODUCT_VERSION_NUMBER"​);​ 
-  
- return installer_version.compareTo(base_version) >= 1; 
- } 
-} 
-</​code>​ 
- 
- 
-===== Reference ===== 
-  * [[https://​helpnet.flexerasoftware.com/​installanywhere2015/​Content/​helplibrary/​ia_ref_actions_modifyxml.htm#​reference-part2_4211107119_1375517|Read/​Modify XML File Action]] 
-  * [[https://​helpnet.flexerasoftware.com/​installanywhere2015/​Content/​helplibrary/​ia_ref_variables_std_ia_vars.htm|Standard InstallAnywhere Variables]] 
-  * [[https://​helpnet.flexerasoftware.com/​installanywhere2015/​Content/​helplibrary/​ia_key_custom_code_overview.htm#​key_concepts_3330169420_1104528|Custom Code]] 
-