AE与Desktop一样采用二级许可 产品和扩展。在ArcGIS 9.3中,对于所有单机应用程序(stand-alone applications),在运行ArcObjects组件之前,对其许可进行初始化是必须的。完成ArcGIS许可检查的APIs是在ESRI.ArcGIS.esriSystem.AoInitialize类中。传统的,许可检查可通过以下方法的一种来完成:

  • 直接式——编写AoInitialize代码,一般来说,可以使用ArcGIS许可初始化向导。对于开发者来说,可以使用Visual Studio集成开发环境下的ESRI工具,通过Add ArcGIS License Checking命令可以调用ArcGIS许可初始化向导。新版本中无相关类型的调用。
  • 间接式——在Windows窗体上放置一个LicenseControl控件。

Runtime绑定

  ArcGIS 10中有一个新的要求——runtime绑定。所谓runtime绑定,就是在任何ArcObjects代码(包括许可初始化代码)被执行之前,指定相称的ArcGIS产品——ArcGIS Desktop或者ArcGIS Engine应用程序。建立runtime绑定的APIs位于程序集ESRI.ArcGIS.Version的类ESRI.ArcGIS.RuntimeManager中,该程序集随着任何ArcGIS 10 runtime一起安装于全局程序集缓存(Global Assembly Cache (GAC))中。安装了ArcObjects .NET SDK,默认的,程序集ESRI.ArcGIS.Version位于C:\Program Files\ArcGIS\DeveloperKit10.0\DotNet文件夹下。可以在Visual Studio IDE中将该程序集添加为项目引用。

使用LicenseControl将ArcGIS 9.3应用程序迁移至ArcGIS 10

  使用LicenseControl,迁移ArcGIS 9.3Desktop或者Engine应用程序至ArcGIS 10,执行以下步骤:

  1. 安装 ArcObjects .NET SDK 。
  2. 升级Visual Studio 2003 和 2005 版本的项目至 Visual Studio 2008 版本。
  3. 确保设置所有 ESRI 程序集的Specific Version属性为False 。单击程序集,选择属性为False。
  4. 添加ESRI.ArcGIS.Version程序集至项目。
  5. 添加ESRI.ArcGIS.ADF.Local程序集至项目。
  6. 在使用其它任何ArcObjects代码之前,添加下面的代码语句所有的应用必须在运行时初始化一个产品许可

 ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.EngineOrDesktop);//运行时的绑定

使用ESRI.ArcGIS.esriSystem.AoInitialize类将ArcGIS 9.3应用程序迁移至ArcGIS 10

  在代码中使用ESRI.ArcGIS.esriSystem.IAoInitialize类也可以执行runtime绑定。有两种方案可以完成该runtime绑定过程:其一是手工编写代码;其二是利用ArcGIS License Initializer Wizard生成代码。下面给出两种方案的详细步骤。

手工编写runtime绑定代码方案步骤:

  1. 安装 ArcObjects .NET SDK 。
  2. 升级Visual Studio 2003 和 2005 版本的项目至 Visual Studio 2008 版本。
  3. 确保设置所有 ESRI 程序集的Specific Version属性为False 。
  4. 添加ESRI.ArcGIS.Version程序集至项目。
  5. 在使用其它任何ArcObjects代码之前,添加下面的代码语句:

  [C#]

ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.Engine);

 利用ArcGIS License Initializer Wizard生成runtime绑定代码步骤:

  1. 安装 ArcObjects .NET SDK 。
  2. 升级Visual Studio 2003 和 2005 版本的项目至 Visual Studio 2008 版本。
  3. 确保设置所有 ESRI 程序集的Specific Version属性为False 。
  4. 添加ESRI.ArcGIS.Version程序集至项目。
  5. 添加ESRI.ArcGIS.ADF.Local程序集至项目。
  6. 在Visual Studio中通过 Add ArcGIS License Checking命令,运行ArcGIS License Initializer wizard。在使用ArcObjects代码之前,如果没有在正确的位置放置RuntimeManager.Bind方法代码,将会导致如下runtime错误信息:

ESRI.ArcGIS.System

          ---AoInitialize类对象初始化产品许可

1.用IsProductCodeAvailable 方法确认是否可获得产品.
2. 用IsExtensionCodeAvailable 确认可以获得什么扩展.
3. 用产品许可初始化应用程序.
4. 如果需要,使用CheckOutExtension 和CheckInExtension methods执行扩展检出

 

4.6        许可初始化

         在为客户部署ArcEngine程序时,必须对许可进行检验,如果没有适当的权限,就会导致程序崩溃,对许可的检验工作见下节。

源代码也可在后续上传!

4.6 许可初始化

为了将ArcEngine的程序部署在另一台机器上,必须首先检查这台机器上有没有可用的许可。如果许可初始化失败,将不能运行该程序。

首先在类中添加变量 private IAoInitialize m_AoInitialize = new AoInitializeClass();

然后在Form_Load事件中添加下面的代码:

//初始化许可

if(m_AoInitialize==null)

{

        MessageBox.Show("Unable to initialize.This programme cannot run.");

        this.Close();

}

//检验是否具有Engine许可

esriLicenseStatus licensestatus=(esriLicenseStatus)m_AoInitialize.

IsProductCodeAvailable(esriLicenseProductCode.esriLicenseProductCodeEngine);

if (licensestatus==esriLicenseStatus.esriLicenseAvailable)

        {                        licensestatus=(esriLicenseStatus)m_AoInitialize.Initialize(esriLicenseProductCode.esriLicenseProductCodeEngine);

        MessageBox.Show("The license is available!");

        if (licensestatus!=esriLicenseStatus.esriLicenseCheckedOut)

                {

                 MessageBox.Show("Initialize failed.This programme cannot run.");

                }

        }

else

        {

        MessageBox.Show("The ArcGIS Engine is unavailable.This programme cannot run.");

                this.Close();

        }

在程序里要保证有ESRI.ArcGIS.esriSystem的引用,这段代码才能正确运行;

 前面是在编程中使用,后面针对的是实际部署环境中对许可的验证。