AE开发中的License有两种方法进行设置,一种是通过LicenseControl控件,另一种是通过IAoInitialize接口设置。整个应用程序中只能有一种方式存在,如果进行了两种License设置,就可能产生错误。
(1)LicenseControl方法
ArcGIS <wbr>Engine中的License设置
(2) IAoInitialize接口方法
private IAoInitialize m_AoInitialize = new AoInitializeClass();
private void Form1_Load(object sender, EventArgs e)
{
m_AoInitialize.Initialize(esriLicenseProductCode.esriLicenseProductCodeEngineGeoDB);
}
当然,对于一个健壮的程序而言,我们还需要在初始化之前先判断将被初始化的许可是否可用,应先使用IsProductCodeAvailable方法进行判断,需要初始化扩展模块的许可,可使用CheckOutExtension方法。下面为许可的检测代码
private IAoInitialize m_AoInitialize = new AoInitializeClass();
private bool CheckLicenses()
{
//Create a new AoInitialize object
if (m_AoInitialize == null)
{
System.Windows.Forms.MessageBox.Show("Unable to initialize. This application cannot run!");
return false;
}
//Determine if the product is available
esriLicenseStatus licenseStatus = (esriLicenseStatus)m_AoInitialize.IsProductCodeAvailable(esriLicenseProductCode.esriLicenseProductCodeEngine);
if (licenseStatus == esriLicenseStatus.esriLicenseAvailable)
{
licenseStatus = (esriLicenseStatus)m_AoInitialize.Initialize(esriLicenseProductCode.esriLicenseProductCodeEngine);
if (licenseStatus != esriLicenseStatus.esriLicenseCheckedOut)
{
System.Windows.Forms.MessageBox.Show("The initialization failed. This application cannot run!");
return false;
}
else
{
//add by 海龙 初始化检查各种扩展
//Determine if the Network Extension is available 也可以是其他扩展,这里以Network Extension为例
licenseStatus = aoInt.CheckOutExtension(esriLicenseExtensionCode.esriLicenseExtensionCodeNetwork);
if (licenseStatus != esriLicenseStatus.esriLicenseCheckedOut)
{
System.Windows.Forms.MessageBox.Show("Check Network Extension failed. This application cannot run!");
return false;
}
}
}
else
{
System.Windows.Forms.MessageBox.Show("The ArcGIS Engine product is unavailable. This application cannot run!");
return false;
}
return true;
}
private void ReleaseLicenses()
{
//Release COM objects and shutdown
ESRI.ArcGIS.Utility.COMSupport.AOUninitialize.Shutdown();
m_AoInitialize.Shutdown();
}
private void FormMain_Load(object sender, EventArgs e)
{
if (CheckLicenses() == false) this.Close();
}
private void FormMain_FormClosing(object sender, FormClosingEventArgs e)
{
ReleaseLicenses();
}
(3)一些重要原则
1.初始化许可的一条重要原则就是一个程序只能初始化许可一次,已经初始化许可的程序一旦运行就无法再修改其初始化的许可,即程序运行期间无法修改其使用的许可。
ArcGIS <wbr>Engine中的License设置
2.LicenseControl中多选许可是没有意义的,第一个被勾选的许可生效。理论上License中可以勾选多项许可,但运行程序时其作用的是第一个被勾选的许可。如下图只有ArcGIS Engine许可被初始化了。
(4)什么情况下需要GDB Update许可
当需要对SDE里数据进行编辑时,以及需要在SDE和Personal Geodatabase中创建复杂ArcGIS对象时,需要使用GDB Update许可。
对SDE里的数据编辑,很好理解,大致就是进行数据插入,删除,更新;对表添加、删除和修改,表结构的变化(添加、删除列)等,因为这些动作都会造成后台数据库的写操作。
对 于Personal Geodatabase,进行简单数据对象和编辑,包括创建、删除和修改普通表都是不需要GDB Update许可的,但对于复杂的Geodatabse对象的创建、删除和修改,则需要GDB Update许可,其中复杂的Geodatabse对象包括几何网络,网络分析模型,拓扑,关系类。这也是为什么往往有写好了一个创建几何网络或拓扑的程 序后,执行起来会被报“需要Geodatabase Update许可”的错。
当需要获取GDB Update许可时,只需勾选ArcGIS Engine Enterprise Geodatabase就可以了。