再次遇到這個問題,之前有解決,當時並沒有記下來,導致本次處理的時候有點模糊不清。在此做個總結,以此銘記!
這個問題主要原因是權限的問題,因爲在AE開發過程中,要取得相應的權限。ArcGIS Engine10版本開始產品架構發生了變化,將ArcGIS Desktop和Engine runtime安裝在不同的目錄下,所以要求Engine應用程序以及自定義組件等綁定到Desktop或者Engine。
解決方案有:
1、添加綁定代碼
ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.EngineOrDesktop);
ESRI.ArcGIS.RuntimeManager.BindLicense(ESRI.ArcGIS.ProductCode.Engine);
3、網上盛傳的解決辦法
/// 先在窗體上添加LicenceControl控件
public void Enable3DAnalysis()
{
ESRI.ArcGIS.esriSystem.IExtensionManagerAdmin iExtensionManagerAdmin = new ESRI.ArcGIS.esriSystem.ExtensionManagerClass();
UID iUid3D = new UIDClass();
iUid3D.Value = "{94305472-592E-11D4-80EE-00C04FA0ADF8}";
object o = new object();
iExtensionManagerAdmin.AddExtension(iUid3D, ref o);
IExtensionConfig iExtensionConfig = (IExtensionConfig)(iExtensionManagerAdmin as IExtensionManager).FindExtension(iUid3D);
iExtensionConfig.State = esriExtensionState.esriESEnabled;
}
4、WPF遇到該錯誤的解決方法
WPF開發中,只能用代碼在App.xaml.cs中初始化License。
public App()
{
ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.EngineOrDesktop);
AoInitialize aoi = new AoInitializeClass();
esriLicenseExtensionCode extensionCode = esriLicenseExtensionCode.esriLicenseExtensionCode3DAnalyst;
esriLicenseProductCode productCode = esriLicenseProductCode.esriLicenseProductCodeEngineGeoDB;
if (aoi.IsProductCodeAvailable(productCode) == esriLicenseStatus.esriLicenseAvailable && aoi.IsExtensionCodeAvailable(productCode, e xtensionCode) == esriLicenseStatus.esriLicenseAvailable)
{
aoi.Initialize(productCode);
aoi.CheckOutExtension(extensionCode);
}
}