再谈ArcGIS10许可初始化

1
分享 2015-03-23
今天一个朋友问了我一个问题,在arcgis9.3下的这句代码IGxDialog pGxDialog = newGxDialogClass(); 为什么在ArcGIS10下不能运行了。
从ArcGIS9.3到ArcGIS10.0,产品的各个方面确实发生了不少的变化;但是至于像这种开发接口的变化无外乎下面三种情况:
n 接口名称变化了,或者是被其它接口所取代
n 接口封装所属的arcgis类库发生了变化
n 接口使用环境发生了变化
回到我们前面提到的问题,接口IGxDialog,在ArcGIS10的开发帮助中可以查到,接口名称、封装的类库都没有发生变化,那么原因很有可能是发生在接口使用的环境发生变化了。
如下图所示,在ArcGIS10帮助中可以查到接口IGxDialog只能用在ArcGIS Desktop下使用,将程序许可初始化改为Desktop方式就可以正常运行了。

后来,把这个信息转告给我那位朋友,本以为可以解决了;但是,许可初始化时新的问题又出来了。
我们先来看看一个ArcObject开发初学者在许可初始化上常犯的一个错误。如下图所示,多数初学者都会许可初始化时勾选的选项越多,所拥有的权限越大。但实际情况恰好相反,ArcGIS许可初始化采用的第一项,即有多个选项时取的永远是第一个被勾选的。下图的这种情况,尽管五个选项都被勾选了,但程序中是按照第一个选项”ArcGIS Engine”来初始化的。


再回到前面提到的那个问题,尽管修改了许可初始化代码,但是如果把代码改成下面这样,程序还是不能正常运行也就不足为怪了
staticclassProgram
{
///<summary>
/// The main entry point for theapplication.
///</summary>
[STAThread]
staticvoid Main()
{
RuntimeManager.Bind(ProductCode.Engine);
RuntimeManager.Bind(ProductCode.Server);
RuntimeManager.Bind(ProductCode.EngineOrDesktop);
RuntimeManager.Bind(ProductCode.Desktop);
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(newMainForm());
}
}
上面那段代码,许可尽管初始化了四次,由于只有第一次初始化有效,所以程序的运行范围只是Engine这个范围,IGxDialog接口无法使用。
下面我们将这段初始化代码稍作改动进行调试,来验证下前面关于许可初始化的论述是否正确。




通过上面三种情形下对代码调试所得结果,可以验证我们前面关于ArcGIS许可初始化的论述,“初始化多少次不重要,关键看谁排在第一号”
注:这里我们要强调的是第三种情形的初始化,尽管ProductCode.EngineOrDesktop
中包含了Desktop;但如果程序运行的环境中同时拥有Engine、Desktop许可,那么程序初始化时优先按Engine初始化。

文章来源:http://blog.csdn.net/sydbc/article/details/17305059

0 个评论

要回复文章请先登录注册