最近研究了一陣應用程序的打包,幾天下來也算很有收穫。普通的.net程序打包相對簡單一點,不過ArcEngine的應用程序還涉及到Engine Runtime的檢測及安裝。因此我採用的是IntallShield軟件打包。
3SNews版主[zhaoxiang_whu]寫過一篇《利用InstallShiled 10.5 打包AE 開發的應用程序》,我也是看了篇教程纔去實踐的。該方法的原理是將Engine Runtime和程序文件一塊兒打包進一個Setup.exe文件中,而後Runtime釋放到目標文件夾下;等因而安裝完成以後才檢測目標機器是否安裝Runtime;若無,則調用系統Msiexec.exe安裝Runtime.Msi。成功後便刪除掉目標機器上的Runtime安裝包。
這是一個可行的方法,可是Runtime 243M,比較大致使安裝包Setup.exe也比較大,並且不管目標機器上是否安裝都得執行一遍Runtime安裝包的釋放和刪除操做。這對於此提出一個改進的方法:
1.將Runtime 拷貝到安裝盤或者與應用程序相同的目錄下;
2.在InstallShield腳本事件的OnBegin中添加判斷:php
RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);
//判斷是否安裝ArcGIS Engine Runtime 也能夠添加版本斷定
if (RegDBKeyExist ("SOFTWARE\\ESRI\\.ArcGIS Engine Runtime") < 0) then
//判斷是否存在Runtime安裝包
if (FindFile ("Runtime", "Setup.msi", svResult) = 0) then
SdShowMsg("正在安裝ArcGIS Engine Runtime 9.2,請稍候...",TRUE);
//判斷是否安裝成功
if (LaunchAppAndWait ("Runtime\\Setup.exe","", LAAW_OPTION_WAIT)<0)then
MessageBox("安裝ArcGIS Engine Runtime 失敗!",WARNING);
abort;
SdShowMsg("正在安裝ArcGIS Engine Runtime 9.2,請稍候...",FALSE);
endif;
SdShowMsg("正在安裝ArcGIS Engine Runtime 9.2,請稍候...",FALSE);
else
MessageBox("沒找到ESRI ArcGIS Engine 9.2 Runtime安裝程序,請自行安裝!",WARNING);
endif
endif;
按此方法能夠檢測和安裝任何軟件運行條件,好比.NetFrameWork和AE運行時補丁、AE運行時中文包、Licence註冊等。最後用戶需點下一步下一步就能夠完成安裝了。此外,若是不熟悉installshield腳本能夠將各類安裝步驟寫成批處理。最後由LaunchAppAndWait ()調用;效果同樣。web
==================
更多Engine安裝與部署參見《ArcGIS Engine 中文開發指南.pdf》spa