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》

InstallShield中打包ArcEnineRuntime的更多相关文章

  1. 在InstallShield中发布单一的Setup.exe文件

    原文:在InstallShield中发布单一的Setup.exe文件 InstallShield默认的Release模式下,生成了一个setup.exe文件,一个msi文件,以及一些其它的杂项文件. ...

  2. InstallShield 软件打包完整教程(含添加自定义依赖环境)

    任务说明:公司一个绿色版的软件,为安装部署是需要很多的环境依赖,如 DevExpress..net4.5.WinRAR等,客户提出安装复杂,并且有漏装后无法启动等情况,现将绿色版转安装版,并将依赖环境 ...

  3. InstallShield程序打包图解

    InstallShield程序打包图解     VS2012中打包工具被看做程序集,在使用时和程序集一样被创建到程序解决方案下.需要我们做的是添加项目即可.但是对于初次使用的朋友来说,我们需要根据提示 ...

  4. InstallShield 2018 打包安装

    关于InstallShield 2018打包安装程序的使用 1. 下载InstallShield2018 建议使用新的版本,毕竟新的版本功能功能全.问题少.用户体验佳. 下载地址:http://www ...

  5. 如何设置Installshield中 feature的选中状态

    原文:如何设置Installshield中 feature的选中状态 上一篇: 使用strtuts2的iterator标签循环输出二维数组之前一直有筒子问如何设置Installshield中 feat ...

  6. ionic在iOS中打包失败

    在ios中打包失败,遇上这样的错误 解决办法,查看index.html的权限是否是只读状态,如果是,改成可读可写,再次打包重试,成功!

  7. 应用InstallShield 2015打包软件打包C#程序

    大家都明白,程序员写出的程序与用户直接使用的程序之间还有一个简单的环节,就是打包.今天就简单介绍下用InstallShield 2015打包工具进行程序的打包, 有兴趣的可以看看! 首先前面安装打包工 ...

  8. 【Electron】在 WSL2 中 打包 electron Linux 版本

    [Electron]在 WSL2 中 打包 electron Linux 版本. 安装 WSL 我使用的是 Ubuntu 20.04.4 LTS 的版本. 安装 WSL 文档地址:https://do ...

  9. installshield中的installscript编程

    上一篇说道了InstallShield高速建立一个打包程序,如今说说InstallShield里面的installscript脚本. 该文属于个人理解.參考一些相关文章. 相关资料下载地址:http: ...

随机推荐

  1. Linux 安装 mysql 转 http://www.cnblogs.com/fnlingnzb-learner/p/5830622.html

    到mysql官网下载mysql编译好的二进制安装包,在下载页面Select Platform:选项选择linux-generic,然后把页面拉到底部,64位系统下载Linux - Generic (g ...

  2. C# 代码设置DataGrid列属性

    1 DataGridTableStyle dts = new DataGridTableStyle(); 2 dataGrid1.TableStyles.Clear(); 3 dts.MappingN ...

  3. 【旧版本】Ubuntu 14.04 下 P416编译器 p4c的安装

    注:此为2017年5月份的安装方法,最新的p4c安装方法见: Ubuntu14.04下 安装p4c 参考: p4c README Ubuntu 14.04 下 P4v16编译器 p4c的安装 系统要求 ...

  4. HDU 5834 Magic boy Bi Luo with his excited tree(树形dp)

    http://acm.hdu.edu.cn/showproblem.php?pid=5834 题意: 一棵树上每个节点有一个价值$Vi$,每个节点只能获得一次,每走一次一条边要花费$Ci$,问从各个节 ...

  5. C#修饰符说明

    方法不加访问修饰符默认的是 private 类不加访问修饰答默认的是 internal //////////////////////////////////////////////////////// ...

  6. c++ 判断数组元素是否都是奇数(all_of)

    #include <iostream> // std::cout #include <algorithm> // std::all_of #include <array& ...

  7. 《A_Pancers》第一次作业:团队亮相

    一.团队及团队成员介绍 1> 队名:A_Pancers 2> 团队成员组成: 201571030310/龙正圆(小组长) 201571030329/杨环宇      20157103030 ...

  8. CTO详细讲解海量日志处理ELK

    ELK实时日志分析平台之Elasticsearch简介 Elasticsearch是一个高度灵活的开源全文检索和分析引擎.它能够迅速(几乎是实时地)地存储.查找和分析大规模数据.通常被用在有复杂的搜索 ...

  9. FastJson之JsonObject, JsonString, JavaBean,List快速转换

    // 将json字符串转换为json对象 JSONObject jsonObject = JSON.parseObject(jsonStr); // {"retState":&qu ...

  10. Codeforces 580A - Kefa and First Steps

    580A - Kefa and First Steps 思路:dp dp[i]表示包括前i个元素中a[i]在内的最大增序列. 代码: #include<bits/stdc++.h> usi ...