每一个用ArcObjects开发的独立的应用程序都需要用一个合适的license来初始化自己,使得它能够在各个分发的机子上成功的运行。license的配置必须在应用程序开始的时候完成。
一、 License 初始化
license的初始化必须在应用程序开始的时候执行,也就是说在所有的ArcObjects开始使用之前。除了下面两种情况,应用程序都需要配置一个License:
- 如果应用程序不是一个独立的可执行文件,换句话说,如果应用程序是一个dll程序。
- 如果应用程序是一个ArcMap或者是第三方产品的扩展模块。
有两种license文件可以用来考虑初始化一个应用程序:产品licenses和扩展licenses。这些licenses可以是Engine Single Use,Desktop Single Use或者是Desktop Concurrent licenses。
- Engine Single License是提供到达ArcGIS Engine或者是带Geodatabase编辑功能的ArcGIS Engine。
- Desktop Concurrent licenses提供到达桌面的concurrent ArcView,ArcEditor和ArcInfo。
- Desktop Single Use licenses和Desktop Concurrent licenses使用相同的技术,提供到达Single Use ArcView,ArcEditor和ArcInfo。它可以和Desktop Concurrent licenses相同的对待。
二、对于不使用 ArcGIS Extension 应用程序的考虑
一旦一个应用程序用一个license初始化以后,它不能被重新初始化;一个应用程序在它的生命周期内只能用一种license初始化。当用一个license初始化应用程序时,下面几个情况需要考虑:
- 应用程序能被运行的产品license的类型。例如,一个企业级的带geodatabase编辑功能的应用程序在ArcGIS Engine license或者ArcView license就不能运行。它只能够在用ArcGIS Engine with Geodatabase Editing license,ArcEditor或者ArcInfo license情况下才能运行。
- 对于应用程序可用的产品license的类型。例如,一个应用程序在ArcGIS Engine license下可以被运行,当然,在ArcView,ArcEditor和ArcInfo license情况下也可以运行。但是,你可能不想被这样的应用程序下消耗掉一个ArcInfo的license。
三、对于使用ArcGIS Extension应用程序的考虑
当一个应用程序用一个的产品license初始化,对license服务器的连接就会产生。后序的对于扩张模块的检入检出都是针对于这个相同的license服务器。
- 如果一个应用程序是用Desktop Concurrent License初始化的话,应用程序后来就只能到达Desktop Concurrent license服务器和它的扩展licenses。
- 如果一个应用程序是用Desktop Single Use license初始化的话,应用程序后来就只能到达Single Use license服务器和它的扩展licenses
- 如果一个应用程序是用Engine Single Use license初始化的话,应用程序后来就只能到达Engine Single Use扩展的licenses。
在初始化之前执行对license服务器(desktop Concurrent或者Single Use)和Engine Single Use的查询是可能的,这样可以知道你需要的licenses是否可用。如果使用Engine Single Use license就能满足你所需要的所有的licenses,那么推荐你使用它而优先于Desktop Concurrent和Desktop Single Use licenses。这样就意味着你不会占用可desktop concurrent licenses的个数。
下面的extension是Engine Single Use licenses可用的:
- 3D Analyst
- Spatial Analyst
- Street Map
对于使用ArcGIS Controls开发应用程序,表格1描述了每一个控件运行时的license需要。
表格1
四、Engine Single Use的designer扩展
Engine Single Use Designer扩展在使用ArcObjects开发应用程序的时候是必要的,这个扩展模块和其他扩展模块的使用是不一样的:
- 这个扩展模块仅仅在设计和开发应用程序的时候需要,它从来不会在运行的时候需要。
- 这个扩展模块不需要检出,它会自动的为你检出。
对于使用ArcGIS Controls开发应用程序,表格2描述了每一个控件在开发时的license需求。
表格2
五、用license初始化应用程序
用license初始化一个应用程序必须按照下面的步骤:
- 检查产品license是否可用
- 检查扩展license是否可用(如果需要)
- 用产品license初始化应用程序
- 如果需要,执行扩展的检出和检入
- 关闭应用程序
AoInitialize类和IAoInitialize接口是提供给开发人员进行license进行初始化的。
六、检查产品license的可用性
产品license的选择决定了应用程序可以实现的功能。一旦产品license被初始化,在它的生命周期内是不能更改的。
- 如果你需要的产品license不可用,你可以选择用更高的产品license来初始化。
- 如果没有可用的license,应用程序应该通知使用人员,允许使用人员去解决这个问题或者退出应用程序。
七、检查扩展 license 的可用性
如果应用程序用到了扩展模块的功能,你就需要在应用程序的初始化之前检查扩展模块license的可用性。检查扩展模块的license必须和应用程序最终初始化的产品license的协调进行,因为它们是对应的。
- 如果应用程序需要的扩展license是不可用的,应用程序应该通知用户,并退出应用程序。
- 如果扩展模块的功能对于应用程序的运行不是必须的,当扩展模块license是不可用时,应用程序应该使依赖于扩展模块的功能不能使用。
八、初始化应用程序
当我们检查需要的产品license和扩展license都是可用时,应用程序应该用产品的license来初始化。一旦初始化以后,在生命周期内将不能重新被初始化。
九、检出,检入扩展模块
当应用程序需要扩展模块的功能的时候,扩展模块可以被检出。一旦应用程序完成功能以后可以检入。或者扩展模块可用在应用程序初始化的时候直接检出,在应用程序关闭时检入。扩展模块的检入和检出的方法依赖于应用程序初始化的产品license的类型。
- 如果应用程序用Engine Single Use licenses初始化,被应用程序使用的任何扩展模块也将是Engine Single Use的,因此任何扩展模块都可以在应用程序初始化后直接检出,在应用程序关闭时检入。
- 如果应用程序是用license服务器初始化的,而且扩展模块对于应用程序的正确运行是必须的话,那么扩展模块可以在应用程序初始化后直接检出,在应用程序关闭时检入。
- 如果应用程序是用license服务器初始化的,扩展模块的功能对于应用程序是可选的话,那么扩展模块可以在应用程序初始化后直接检出,也可以在扩展模块的功能需要的时候检出。当然当扩展模块检入的时候,相关扩展模块的功能将不能用。
十、关闭
在应用程序关闭之前,AOInitialize对象必须被关闭。这样能保证被使用的ESRI libraries被卸下。
十一、 License 初始化失败
如果一个产品和扩展模块检出时失败,license的状态会表明失败的原因。License检出失败有下面几个原因:
- 产品没有得到许可
- license不可用,因为它正在被使用(仅仅指得是Desktop Concurrent Licenses)
- 不可预制的失败由于系统管理的原因
- license已经被初始化。一个应用程序在它的生命周期之内不能更改license的初始化
文章摘自:http://www.esrichina-bj.cn/library/arcnews16/ArcGIS%20Engine1.htm