细说AE许可
前言:以前在AE开发都是选择直接拖拽arcgis listense控件,在属性面板里面直接打勾勾,很是方便,但是并不是所有的开发都可以这样,近期就碰到一个,只能自己手动初始化许可,由于以前的偷懒,现在碰到各种问题,灰头灰脑的。只好将许可初始化细细研究一番。宗旨,空手也可以套白狼。
1:AE10发布以来,对许可的掌控是愈发的严格,简直就是疯子,干啥都要。就像现在的啥都跟身份证绑定,丢了身份证火车都做不了。太严格也就带来了一系列的问题,让人恼火。
1)最简单的初始化。
新建一个window应用程序,添加必要的引用,不要添加许可控件进去
,这时候应用程序木有任何许可,添加下面2行代码,测试。
PolygonClass_Poly=newPolygonClass();
_Poly.Close();
发现一运行就报错了,然而你会纳闷NEW各对象也不行么?答案是不行,不行就是不行。课件AE10多么小气了吧。报错编号:80040111
现在在添加对许可的初始化,就写在前面就可以,一切自己动手。如下:
RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.EngineOrDesktop);
运行,发现已经通过:
2)初始化扩展模块许可
IAoInitialize _IAoInitialize = newAoInitializeClass();
记得在这句之前要事先绑定你需要初始化的产品类型。
RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.EngineOrDesktop);
表示绑定为AE或者桌面应用程序。不然运行要报错,AE也会自动提示需要绑定。
在一切都绑定之后,开始初始化:
_IAoInitialize.Initialize(esriLicenseProductCode.esriLicenseProductCodeEngine);//初始化engine许可,
esriLicenseProductCode 表示不同的产品,根据自己需要添加。
经过上面的这些,基本的许可我们都初始化了,再不进行扩展模块分析下,程序都可以健壮的运行。但是如果功能里面有空间分析功能,这就需要添加相应的跨站模块许可。
CheckOutExtension方法用来在添加扩展模块的许可,添加的前提是Initialize过产品类型。
_IAoInitialize.CheckOutExtension(esriLicenseExtensionCode.esriLicenseExtensionCode3DAnalyst);
通过这一句就可以添加3D分析功能了。
esriLicenseExtensionCode枚举类型里面包含了ArcGIS所有的扩展模块类型39个(详细的看帮助),需要那个依次添加即可。
与CheckOutExtension对应的CheckInExtension方法,用来移除某个扩展模块的许可。
3)许可检查
经常的在对许可初始化的时候,都需要检查一下初始化是否完成成功。
IAoInitialize接口提供了三个方法,用来对初始化过程的检查。
_IAoInitialize.IsExtensionCodeAvailable();//检查扩展许可时候可用
_IAoInitialize.IsExtensionCheckedOut();//检查某个扩展许可是否被添加
_IAoInitialize.IsProductCodeAvailable();//检查主产品的许可是否可用
检查结果返回值是esriLicenseStatus枚举类型:如下:
许可检查可以让我们在对许可初始化失败或者成功后做出相应的处理。
经过上面这些,无伦需要那些许可来保证代码正确执行,都可以顺利的完成。
下面是一个简单的许可初始化例子:
publicstatic class LiscenseManager
{
/// <summary>
/// 用来初始化许可
/// </summary>
public static void StratUsing()
{
RuntimeManager.Bind(ProductCode.EngineOrDesktop);
IAoInitialize PAoInitialize = newAoInitializeClass();
PAoInitialize.Initialize(esriLicenseProductCode.esriLicenseProductCodeEngine);
esriLicenseStatus _LicenseStatus =PAoInitialize.IsProductCodeAvailable(esriLicenseProductCode.esriLicenseProductCodeEngine);
if (_LicenseStatus ==esriLicenseStatus.esriLicenseAvailable)
{
PAoInitialize.CheckOutExtension(esriLicenseExtensionCode.esriLicenseExtensionCode3DAnalyst);
PAoInitialize.CheckOutExtension(esriLicenseExtensionCode.esriLicenseExtensionCodeSpatialAnalyst);
}
if (PAoInitialize.IsExtensionCodeAvailable(esriLicenseProductCode.esriLicenseProductCodeEngine,esriLicenseExtensionCode.esriLicenseExtensionCodeSpatialAnalyst)==esriLicenseStatus.esriLicenseUnavailable)
{
PAoInitialize.CheckOutExtension(esriLicenseExtensionCode.esriLicenseExtensionCodeSpatialAnalyst);
}
if(PAoInitialize.IsExtensionCodeAvailable(esriLicenseProductCode.esriLicenseProductCodeEngine,esriLicenseExtensionCode.esriLicenseExtensionCode3DAnalyst) == esriLicenseStatus.esriLicenseUnavailable)
{
PAoInitialize.CheckOutExtension(esriLicenseExtensionCode.esriLicenseExtensionCode3DAnalyst);
}
}