zoukankan      html  css  js  c++  java
  • 利用InstallShiled 10.5制作AE应用程序安装包

    [转]利用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 的注册
    在安装路径下的BinSoftwareAuthorization.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>/system32driversetcService.检查是否有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;

  • 相关阅读:
    Java中静态字段和静态方法
    Java抽象方法、抽象类以及接口
    Java单例模式
    java继承
    java构造方法
    java方法
    Java常量与变量
    Java初识
    1
    补码,反码,加减法运算,类型取值范围
  • 原文地址:https://www.cnblogs.com/xianyin05/p/3357636.html
Copyright © 2011-2022 走看看