问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

arcgis engine 利用iaoinitialize初始化许可后 报许可不可用

发布网友 发布时间:2024-09-26 17:34

我来回答

1个回答

热心网友 时间:2024-10-05 08:36

初始化GDB许可的C#代码:
private IAoInitialize m_AoInitialize = new AoInitializeClass();

...

private bool CheckLicenses()
{
if (m_AoInitialize == null)
{
MessageBox.Show("Unable to initialize. This application cannot run!", "ArcGIS Engine许可错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
return false;
}
esriLicenseStatus licenseStatus = (esriLicenseStatus)m_AoInitialize.IsProductCodeAvailable(esriLicenseProductCode.esriLicenseProductCodeEngineGeoDB);

if (licenseStatus == esriLicenseStatus.esriLicenseAvailable)
{
licenseStatus = (esriLicenseStatus)m_AoInitialize.Initialize(esriLicenseProductCode.esriLicenseProductCodeEngineGeoDB);
if (licenseStatus != esriLicenseStatus.esriLicenseCheckedOut)
{
MessageBox.Show("The initialization failed. This application cannot run!", "ArcGIS Engine许可错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
return false;
}
}
else
{
MessageBox.Show("The ArcGIS Engine product is unavailable. This application cannot run!", "ArcGIS Engine许可错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
return false;
}
return true;
}

...

private void Form1_Load(object sender, EventArgs e)
{
if (CheckLicenses() == false)
{
this.Close();
}
...
}

另:ArcGIS Engine中初始化许可常见问题归纳 http://blog.sina.com.cn/s/blog_4ad115cb010009bi.html
原文如下:

ArcGIS Engine许可初始化
关于初始化Engine许可的,其实原理都很简单,大家一般都没有问题,但又往往会因为不够细心加上Engine的“小脾气”,让不少程序员都要在这里犯错。
以Engine9.2为例,应用程序是强制初始化许可,也就是说必须使用LicenseControl或AO接口初始化许可,否则应用程序无法启动。Engine9.1未采取强制初始化许可策略,而是应用程序创建时就初始化标准Engine许可。在一般情况下,我们会用将LicenseControl拖放到主窗体上完成初始化。但当Engine程序需要使用ArcGIS Engine Enterprise Geodatabase(以下简称GDB Update)许可的时候,我们就往往会由于意识不到应该使用该许可,以及无法正确的初始化该许可而陷入麻烦。
注意:以下所探讨的所有“许可”并不包括扩展模块许可,如三维分析、空间分析和网络分析;而只是包括Engine可使用的Engine标准许可、Engine GDB Update许可、ArcView许可、ArcEditor许可和ArcInfo许可五种。
问题分为三方面:
1. 什么情况下需要GDB Update许可
当需要对SDE里数据进行编辑时,以及需要在SDE和Personal Geodatabase中创建复杂ArcGIS对象时,我们需要使用GDB Update许可。
对SDE里的数据编辑,很好理解,大致就是进行数据插入,删除,更新;对表添加、删除和修改,表结构的变化(添加、删除列)等,因为这些动作都会造成后台数据库的写操作。
对于Personal Geodatabase,进行简单数据对象和编辑,包括创建、删除和修改普通表都是不需要GDB Update许可的,但对于复杂的Geodatabse对象的创建、删除和修改,则需要GDB Update许可,其中复杂的Geodatabse对象包括几何网络,网络分析模型,拓扑,关系类。这也是为什么往往有些经验的程序员写好了一个创建几何网络或拓扑的程序后,执行起来会被报“需要Geodatabase Update许可”的错。

2. 怎样初始化GDB Update许可
当我们意识到需要使用Engine的GDB Update许可时,怎样才能将它正确的初始化呢?Engine给我们提供了两种初始化许可的方法:
1) 使用LicenseControl控件。将该控件拖放到主窗体之上,勾选适当的许可,并确保程序启动该窗体可加载,就可以完成许可初始化。如下图:

2) 使用IAoInitialize.Initialize方法加入适当的参数进行初始化。VB6的例子代码如下:
Option Explicit

Dim m_pAoInitialize As IAoInitialize

Private Sub Form_Load()
'实例化
Set m_pAoInitialize = New AoInitialize
'初始化 EngineGeoDB 许可
Call m_pAoInitialize.Initialize(esriLicenseProductCodeEngineGeoDB)
End Sub

当然,对于一个健壮的程序而言,我们还需要在初始化之前先判断将被初始化的许可是否可用,应先使用IsProductCodeAvailable方法进行判断,需要初始化扩展模块的许可,可使用CheckOutExtension方法。

3. 初始化过程中容易犯的错误
我们应该注意到,Engine是有些“小脾气”的。如果没有按照它的“习惯”,它是不会为我们乖乖工作的。其中有个很重要的原则(以下简称“重要原则”)就是一个程序只能初始化许可一次,已经初始化许可的程序一旦运行就无法再修改其初始化的许可,即程序运行期间无法修改其使用的许可。
1) LicenseControl和IAoInitialize接口两种初始化方法,一个应用程序中只能使用一种方法,如果两种一起使用,哪一个“说得算”就不一定了。如果这两种方式同时使用,且两种初始化的许可级别一样时,也许我们感觉不到什么不对,但当我们需要修改初始化许可级别,而又只改了一种初始化方法却忘记了另一种,根据“重要原则”可知,这次修改初始化很可能无法生效。
2) 使用LicenseControl初始化时,当我们将其拖放到窗体上时,它往往会自动勾选“ArcGIS Engine”许可,也就是自动初始化标准Engine许可。但当我们需要通过它更改许可级别时,Engine9.2会提示如下信息:

该信息的含义是警告我们该程序已经初始化了Engine标准许可,若要初始化其他许可,重启开发环境后才会生效。对这句话的解释是,如果我们想通过LicenseControl初始化其他级别的Engine许可,需要在勾选其他许可之后关闭开发环境(如图为VB6)再打开才生效,否则还是原来的许可。另外,对于Engine9.1,此种情况下没有该警告,问题会更隐蔽(无语吧 -_-!)。

3) LicenseControl中多选许可是没有意义的,第一个被勾选的许可生效。如下图:

这种情况下,实际上该应用程序初始化的是Engine标准许可,而不是其他。虽然LicneseControl从操作上可以让用户多选许可,但并不代表它会将您勾选的许可全部签出。另外,这些许可都是有对应和包含关系的。其中ArcGIS Engine与ArcView是对应的,ArcGIS Engine Enterprise Geodatabase与ArcEditor是对应的;ArcGIS Engine Enterprise Geodatabase是包含ArcGIS Engine许可的。当我们需要GDB Update许可的时候,仅仅需要勾选ArcGIS Engine Enterprise Geodatabase即可,为了“保险起见”勾选上其他许可反而会弄巧成拙。

使用IAoInitialize接口进行初始化,Initialize方法只能调用一次,多余的调用是不会生效的,道理就像上面LicenseControl勾选了多个许可一样。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
土地入股的定义 ups快递客服电话24小时 贷款记录在征信保留几年? 安徽徽商城有限公司公司简介 安徽省徽商集团新能源股份有限公司基本情况 安徽省徽商集团有限公司经营理念 2019哈尔滨煤气费怎么有税? 快手删除的作品如何恢复 体育理念体育理念 有关体育的格言和理念 应急局有消防执法权吗 高分求:【韩服痕迹】lNl달님-太空蜿蜒跑道L3-1分57秒62-莱齐 清晰... 痕迹画廊在哪个城市? ...把什么写在中断什么写在主函数什么写在while里 建筑工程评高工要本科文凭吗? 有哪些女明星是留刘海鹅蛋脸的? 呛口小辣椒的叫什么发型 中国武术几段需要发表论文 by2新发型如果下面没那么长短一点,而且不卷,只是往里扣的,好看吗_百度... 呛口小辣椒的发型是怎么弄的? 视网膜脱落会瞎吗 我做视网膜脱落手术有十三年了,最近看东西有黑点,就是所谓的飞蚊症,请... ...m=1.0kg的物体.物体与斜面间动摩擦因数μ=0.25,现用轻 ...m停放在水平面上,质量为5.0kg,水平面与物体间动摩擦因数为0.25。 ...的物体静止在水平地面上,物体与水平面的滑动摩擦因数μ=0.25... 2011年4月22日NBA比赛是哪个队对哪个队? ...质量m=1.0kg的物体.物体与斜面间动摩擦因数?=0.25 2011-2012赛季nba季后赛什么时候开始? 三股滑轮组中F=460N,重物540N,摩擦力是重物的0.25倍,10S内运动了2米... 5大Excel隐藏技巧 "金屋三十年代有一位苏联科幻作家,后被称为苏联科幻之父,他的名字是... 吃KYBIO胶原蛋白会发胖吗? 喝了两天皮肤就变细滑了,是因为我的吸收好吗? ...想用山寨手机QQ,但是手机自身没带,要自己下MPR的,要怎么弄阿... 请问如何知道我的山寨手机支持什么软件 我的手机是东信ea528(山寨机),支持mrp格式软件 游戏,我的手机上有“冒 ... 山寨机自带QQ是MRP格式,如何下载其他的软件? 如何检测山寨手机,是否支持应用平台功能。如:MRP、APP、NES、JRA、VX... 北京外国语大学的金融专业好么 我的手机是山寨诺基亚E66,不知道支不支持MRP格式的软件、可是上指定的... 在保定东站取得磁票。。怎么用啊???我没用过。。。 高铁中途上车 ...写点评了?是不是故意屏蔽这个功能了?不点评点怎么返现啊?无语... 驴评网网站介绍 在携程网上酒店点评免责声明 求discipline psp汉化版打好补丁的完整版发这个邮 箱1 81431803 @ q... “千里云峰千里恨”的出处是哪里 昨晚梦见好多的蛇在别人身上缠绕,我害怕的远远躲开是什么意思啊,还梦了... 我是一名女性,昨晚做梦梦见一条大蛇缠绕在我的脖子上。我不敢动,但是... 热管余热回收器热管的原理及特性