[转]利用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. LightOJ 1229 Treblecross(SG函数打表 + 遍历)题解

    题意:给你一串含“.”和“X”的字串,每次一个玩家可以把‘."变成“X”,谁先弄到三个XXX就赢.假如先手必赢,输出所有能必赢的第一步,否则输出0. 思路:显然如果一个X周围两格有X那么肯定 ...

  2. The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path 解决方法

    项目忽然出现 The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Pat ...

  3. The way to Go(7): 变量

    参考: Github: Go Github: The way to Go 变量 一般格式:var identifier type. Go在声明变量时将变量的类型放在变量的名称之后: 避免像 C 语言中 ...

  4. C++中的也能使用正则表达式----转载

    转自:https://www.cnblogs.com/ittinybird/p/4853532.html, 以作笔记. 正则表达式Regex(regular expression)是一种强大的描述字符 ...

  5. ACMG遗传变异分类标准与指南

    2015年,美国权威机构——美国医学遗传学与基因组学学会(ACMG)编写和发布了<ACMG遗传变异分类标准与指南>.为帮助我国医疗工作者和遗传咨询从业者更好地理解ACMG遗传变异分类标准. ...

  6. 【Python】【问题集锦】

    1. 用pycharm安装第三方包失败,报类似于“sort"的错误,就转战终端 2. Mac终端安装第三包失败,报类似于“ PermissionError: [Errno 13] Permi ...

  7. bzoj 4403 序列统计 卢卡斯定理

    4403:序列统计 Time Limit: 3 Sec  Memory Limit: 128 MB Description 给定三个正整数N.L和R,统计长度在1到N之间,元素大小都在L到R之间的单调 ...

  8. jq 插入结构

    一.插入 1. append $("#div").append('<a href="baidu.com">a</a>') ;   // ...

  9. tp3.x和tp 5的区别

    由于TP5.0是一个全新的颠覆重构版本,所以现在面试很多面试官喜欢问TP3.2和TP5之间的区别,那他们之间到底有哪些区别呢?一.目录  TP5目录 二.需要摒弃的 3.X 旧思想 模型的变动     ...

  10. Codeforces 535C - Tavas and Karafs

    535C - Tavas and Karafs 思路:对于满足条件的r,max(hl ,hl+1 ,hl+2 ,......,hr )<=t(也就是hr<=t)且∑hi<=t*m.所 ...