轉-ArcGIS Engine中的License設定

weixin_34015860發表於2016-04-15
AE開發中的License有兩種方法進行設定,一種是通過LicenseControl控制元件,另一種是通過IAoInitialize介面設定。整個應用程式中只能有一種方式存在,如果進行了兩種License設定,就可能產生錯誤。
(1)LicenseControl方法
 ArcGIS <wbr>Engine中的License設定
 
 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就可以了。
 

相關文章