[转]利用InstallShiled 10.5制做AE应用程序安装包 做者:3SNEWS 社区ESRI(ArcGIS)版版主:zhaoxiang_whu
http://www.3snews.net/bbs/index.phpphp
利用InstallShiled 10.5 打包AE 开发的应用程序
AE 开发的应用程序必需要在装有AE 运行时而且正确的受权的机器上才能够运行。所以,在制做安装包的
时候能够把AE 运行时一块儿打进来,用户在安装程序时,只须要执行一个安装文件就能够正确的运行应用程序
了。利用InstallShiled10.5 打包的基本思路以下:
一、先将本身的程序打包进来;
二、安装AE 运行时;
三、安装AE 运行时补丁;
四、检查系统文件夹下的服务文件是否正确的写入服务;
五、对AE 运行时进行受权。
有了以上基本思路就能够开始制做安装包了。具体步骤以下:
1、
打包本身的程序
一、启动InstallShiled,建立一个InstallScript Project,以下图:
二、能够利用InstallShiled 的工程向导,将本身的程序打包进来,效果以下图:数据库
其中的Application Target Folder 就是你的应用程序在客户机器上的那个安装文件夹。
2、
将全部须要安装的AE相关的文件准备好,并设置好他们在目标机器上的路径
一、将全部AE 运行时相关的待安装文件准备好,放入同一个文件夹内备用。
二、在Application Target Folder 文件夹下新建一个文件夹: “temp”。此文件夹的做用是用于临时放置AE
运行时相关的文件,安装过程完成之后,此文件夹及里面的全部内容将被删除。
三、将本机上的准备好的打包文件拖入到temp 文件夹下,以下图所示:tcp
3、
写安装脚本,进行运行时及其补丁的安装和受权
文件和路径都已经准备好了之后,就能够开始写安装脚本了。其实在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 );
4、
检查系统文件夹下的服务文件是否正确的写入了服务
有时候正确的安装了AE 运行时并对其受权,但在链接SDE 数据库的时候,却依然会出现问题,这主要是由于
系统文件夹下的Service 文件缺乏SDE 的服务信息。这个文件夹的路径为:
<Windows>/system32\drivers\etc\Service.检查是否有5151/tcp 服务,若没有,则加上一行:
esri_sde 5151/tcp sde #ArcSDE
5、
生成安装包
文件路径设置完成,且代码也编译经过之后就能够经过Installshield 生成安装文件了。方便起见,能够将
其生成为单个EXE 文件。这样以来,用户运行该安装文件后,能够只须要一直点下一步就能够完成程序的安装
和受权了。
6、
脚本程序
如下脚本只实现了基本的功能,各位根据本身的须要进行修改。
#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;.net