[转]利用InstallShiled 10.5制作AE应用程序安装包 作者:3SNEWS 社区ESRI(ArcGIS)版版主:zhaoxiang_whu
http://www.3snews.net/bbs/index.php

利用InstallShiled 10.5 打包AE 开发的应用程序
AE 开发的应用程序必须要在装有AE 运行时并且正确的授权的机器上才可以运行。因此,在制作安装包的
时候可以把AE 运行时一起打进来,用户在安装程序时,只需要执行一个安装文件就可以正确的运行应用程序
了。利用InstallShiled10.5 打包的基本思路如下:
1、先将自己的程序打包进来;
2、安装AE 运行时;
3、安装AE 运行时补丁;
4、检查系统文件夹下的服务文件是否正确的写入服务;
5、对AE 运行时进行授权。
有了以上基本思路就可以开始制作安装包了。具体步骤如下:
一、
打包自己的程序
1、启动InstallShiled,创建一个InstallScript Project,如下图:
2、可以利用InstallShiled 的工程向导,将自己的程序打包进来,效果如下图:

其中的Application Target Folder 就是你的应用程序在客户机器上的那个安装文件夹。
二、
将所有需要安装的AE相关的文件准备好,并设置好他们在目标机器上的路径
1、将所有AE 运行时相关的待安装文件准备好,放入同一个文件夹内备用。
2、在Application Target Folder 文件夹下新建一个文件夹: “temp”。此文件夹的作用是用于临时放置AE
运行时相关的文件,安装过程完成以后,此文件夹及里面的所有内容将被删除。
3、将本机上的准备好的打包文件拖入到temp 文件夹下,如下图所示:

三、
写安装脚本,进行运行时及其补丁的安装和授权
文件和路径都已经准备好了以后,就可以开始写安装脚本了。其实在InstallShiled 里面安装AE 运行时及
其补丁的原理都相当简单,就是调用了Windows 的Installer 程序而已。因此,只需要将调用Installer 的参数
设置正确就可以了。具体参数说明如下:
1 执行安装时的参数
Msiexec.exe /i "%MSIPATH%" /qn ADDLOCAL= %Feature%
MSIPATH 是Engine 的安装路径包括msi 包文件名
Feature 表示安装时的选项多个feature 用逗号隔开
feature 描述
ArcEngine ArcGIS Engine
JavaRuntime ArcGIS Engine-Java Runtime
DotNetRuntime ArcGIS Engine .NET Runtime
2 安装后license 的注册
在安装路径下的\Bin\SoftwareAuthorization.exe 是注册license 的执行文件
有三个常用参数
-p <选择注册项> IMS SDE ENGINE DEVKIT SERVER
-LIF <选择注册文件>
-S 无界面运行
关于更具体的参数说明以及Windows Installer 的运行参数可参考EDN 上面的说明。
在调用Windows 的Installer 时,可以使用IS 的内部函数:LaunchAppAndWait,其函数原型为:
LaunchAppAndWait ( szProgram, szCmdLine, nOptions );
四、
检查系统文件夹下的服务文件是否正确的写入了服务
有时候正确的安装了AE 运行时并对其授权,但在连接SDE 数据库的时候,却依然会出现问题,这主要是因为
系统文件夹下的Service 文件缺少SDE 的服务信息。这个文件夹的路径为:
<Windows>/system32\drivers\etc\Service.检查是否有5151/tcp 服务,若没有,则加上一行:
esri_sde 5151/tcp sde #ArcSDE
五、
生成安装包
文件路径设置完成,且代码也编译通过以后就可以通过Installshield 生成安装文件了。方便起见,可以将
其生成为单个EXE 文件。这样以来,用户运行该安装文件后,可以只需要一直点下一步就可以完成程序的安装
和授权了。
六、
脚本程序
以下脚本只实现了基本的功能,各位根据自己的需要进行修改。
#include "ifx.h"
function OnMoved()
string szCommand,szCmdLine,szPath,svResult,LicPath;
STRING svLine,svReturnLine,InsertTxt; //////操作文件的变量
NUMBER nvFileHandle; //////////文件句柄
NUMBER nvLineNumber ,nvResult; //////////操作文件的变量
begin
szPath=TARGETDIR^"temp";
szCommand = WINSYSDIR^"msiexec.exe";
LongPathToShortPath(szCommand);
////////////////////////安装AE 运行时
if (FindFile (szPath^"ArcEngine92", "Setup.msi", svResult) = 0) then
szCmdLine =TARGETDIR^"temp"^"ArcEngine92"^"Setup.msi\" /qn";
LongPathToShortPath(szCmdLine);
SdShowMsg("正在安装ArcGIS Engine Runtime,请稍候...",TRUE);
Delay(1);
if (LaunchAppAndWait(szCommand ,"/i \""+szCmdLine,WAIT) < 0) then
MessageBox("安装ArcGIS Engine Runtime 失败!",WARNING);
abort;
SdShowMsg("正在安装ArcGIS Engine Runtime,请稍候...", FALSE);
endif;
SdShowMsg("正在安装ArcGIS Engine Runtime,请稍候...", FALSE);
endif;
/////////////////////安装AE 运行时补丁
if (FindFile (szPath, "ArcGISEngine92sp2.msp", svResult) = 0) then
szCmdLine =TARGETDIR^"temp"^"ArcGISEngine92sp2.msp\" /qn";
// SprintfBox(INFORMATION,"TEST","%s",szCmdLine);
LongPathToShortPath(szCmdLine);
SdShowMsg("正在安装ArcGIS Engine Runtime SP2,请稍候...",TRUE);
Delay(1);
if (LaunchAppAndWait(szCommand ,"/Update \""+szCmdLine,WAIT) < 0) then
MessageBox("安装ArcGIS Engine Runtime SP2 失败!",WARNING);
abort;
SdShowMsg("正在安装ArcGIS Engine Runtime SP2,请稍候...", FALSE);
endif;
SdShowMsg("正在安装ArcGIS Engine Runtime SP2,请稍候...", FALSE);
endif;
/////////////////////////////安装AE 中文包
if (FindFile (szPath, "ACEEngine92sp2.exe", svResult) = 0) then
szCmdLine =TARGETDIR^"temp"^"ACEEngine92sp2.exe\" /qn";
LongPathToShortPath(szCmdLine);
SdShowMsg("正在安装ArcGIS Engine Runtime 中文包,请稍候...",TRUE);
Delay(1);
if (LaunchAppAndWait(szCmdLine ,"",WAIT) < 0) then
MessageBox("",WARNING);
SdShowMsg("正在安装ArcGIS Engine Runtime 中文包...", FALSE);
endif;
SdShowMsg("正在安装ArcGIS Engine Runtime 中文包...", FALSE);
endif ;
/////////////////////////AE 授权
SdShowMsg("正在对ArcGIS Engine Runtime 授权,请稍候...",TRUE);
LicPath=" -Lif \"" +TARGETDIR^"temp"^"ArcGIS Engine Runtime License.ECP\" -s";
if (FindFile (TARGETDIR^"temp", "ArcGIS Engine Runtime License.ECP", svResult) = 0) then
szCmdLine="C:\\Program Files\\ArcGIS\\Bin\\SoftwareAuthorization.exe " ;
if (LaunchAppAndWait(szCmdLine ,LicPath,WAIT) < 0) then
MessageBox("授权错误!",WARNING);
abort;
endif;
endif;
SdShowMsg(正在对ArcGIS Engine Runtime 授权,请稍候"...",FALSE);
////////////////////////// 写服务文件
szCmdLine=WINSYSDIR^"drivers"^"etc" ;
InsertTxt="esri_sde 5151/tcp sde #ArcSDE";

OpenFileMode (FILE_MODE_APPEND);
if (OpenFile (nvFileHandle, szCmdLine , "services") < 0) then
MessageBox ("不能打开服务文件", SEVERE);
abort;
endif;
nvResult = FileGrep (szCmdLine ^ "services", "esri_sde", svReturnLine,
nvLineNumber, RESTART);
if (svReturnLine!="") then
else
if (WriteLine(nvFileHandle, InsertTxt) < 0) then
MessageBox ("写入SDE 服务信息失败", SEVERE);
endif;
endif ;
CloseFile (nvFileHandle);
if (ExistsDir(TARGETDIR^"temp")=0 ) then
if (DeleteProgramFolder (TARGETDIR^"temp") < 0) then
MessageBox ("删除临时文件夹失败,请手动删除!", SEVERE);
endif;
endif ;
end;

利用InstallShiled 10.5制作AE应用程序安装包的更多相关文章

  1. 使用InstallAnywhere7.1制作Java exe程序安装包

    [转[使用InstallAnywhere7.1制作Java exe程序安装包 使用InstallAnywhere7.1制作Java exe程序安装包 对于已经完成的Java应用程序开发项目,从商业化角 ...

  2. 制作Linux下程序安装包——使用脚本打包bin、run等安装包

    制作简单的安装包的时候可以简单的用cat命令连接两个文件,然后头部是脚本文件,执行的时候把下面的文件分解出来就行了.一般这个后部分的文件是个压缩 包,那样,就能够打包很多文件了,在脚本中解压出来即可. ...

  3. 基于DevExpress的Winform程序安装包的制作

    在我们做系统开发的时候,都会面临一个安装包制作的问题,如何把我们做好的系统,通过安装包工具整合成一个安装包给客户进行安装.安装包的优势就是一步步安装就可以了,不用复制一大堆文件给客户,还怕缺少那个文件 ...

  4. 【原创】VB6.0应用程序安装包的生成(Setup Factory 9.0制作安装包的方法)

    VB6.0应用程序安装包的生成,利用其自带的打包工具生成的安装程序很简陋,一点不美观:如果想让自己的应用程序安装的时候显得高大上一点,本教程提供使用Setup Factory 9.0制作安装包的方法. ...

  5. [程序安装包制作] Advanced Installer 备忘

    原文:[程序安装包制作] Advanced Installer 备忘 Product Information - Product Details 这个重点是Product Version.讲这个之前, ...

  6. 用Inno Setup制作WEB程序安装包

    原文 用Inno Setup制作WEB程序安装包 最近做了一个WEB程序的安装包,我把制作的过程做个介绍,贴出源码给大家做个参考 看看inno 的脚本 [Setup] AppCopyright=tes ...

  7. Mac OS平台下应用程序安装包制作工具Packages的使用介绍(补充)

    上一篇:Mac OS平台下应用程序安装包制作工具Packages的使用介绍 补充说明 上一篇文章中介绍了如何使用Packages如何创建mac下的安装包.但是这样制作出来的安装包只能安装到系统的文件路 ...

  8. Mac OS平台下应用程序安装包制作工具Packages的使用介绍

    一.介绍 Windows下面开发好的应用程序要进行分发时有很多打包工具可供选择,如Inno Setup, InstallShield, NSIS, Advanced Installer, Qt Ins ...

  9. 使用WinRar软件制作程序安装包

    之前我写过使用好压软件打包程序,见随笔: 使用好压(HaoZip)软件打包EverEdit制作安装程序 - Fetty - 博客园http://www.cnblogs.com/fetty/p/4907 ...

随机推荐

  1. POJ 1830 开关问题(高斯消元)题解

    思路:乍一看好像和线性代数没什么关系.我们用一个数组B表示第i个位置的灯变了没有,然后假设我用u[i] = 1表示动开关i,mp[i][j] = 1表示动了i之后j也会跟着动,那么第i个开关的最终状态 ...

  2. html文件引用本地js文件出现跨域问题的解决方案

    在本地做个小demo,很简单,一个html文件,一个js文件,在html文件中通过<script>标签引入js,但是出现了一个意想不到的问题:浏览器报错—— 一番折腾后,终于弄明白了:加载 ...

  3. 返回json格式数据乱码

    本文为博主原创,未经允许不得转载: 原本返回json格式数据的代码: @ResponseBody @RequestMapping(value = "getListByTime", ...

  4. HDU 6128 Inverse of sum(同余)

    http://acm.hdu.edu.cn/showproblem.php?pid=6128 题意:有一个a数列,并且每个数都小于p,现在要求有多少对$(i,j)$满足$\frac{1}{a_i+a_ ...

  5. java编程内容之开始

    java应用程序开发应该掌握的各方面技术 1.初识java,熟悉Eclipse开发工具 2.java语言基础 3.流程控制,数组,字符串,类与对象 4.接口,继承与多态,类的高级特性 5.Java集合 ...

  6. JavaScript的知识基本介绍

    ECMAScript js简单介绍(与java的区别)        1.语法(区分大小写,弱类型,分号可写可不写)        2.变量(只能使用var定义,要么不定义,如果在函数内部使用var定 ...

  7. Android JNI(一)——NDK与JNI基础

    本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Nati ...

  8. Jedis 之 初始<一>

    package xx.jedis; import java.util.Set; import redis.clients.jedis.Jedis; import redis.clients.jedis ...

  9. HDU 1540 Tunnel Warfare

    HDU 1540 思路1: 树状数组+二分 代码: #include<bits/stdc++.h> using namespace std; #define ll long long #d ...

  10. 链表排序 Sort List

    2018-08-11 23:50:30 问题描述: 问题求解: 解法一.归并排序 public ListNode sortList(ListNode head) { if (head == null ...