InstallShield中打包ArcEnineRuntime

InstallShield中打包ArcEnineRuntime

        最近研究了一阵应用程序的打包,几天下来也算颇有收获。普通的.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中添加判断:

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 ()调用;效果一样。

==================
更多Engine安装与部署参见《ArcGIS Engine 中文开发指南.pdf》

原文地址:https://www.cnblogs.com/xianyin05/p/3357642.html