问一个很弱的ArcGis engine开发问题?

worldofwest 2013-10-17 11:36:18

我用ArcGis engine+c#开发时,发现了这么一个问题:在vs2005中编译运行时,程序可以运行,但是,点击工程的bin文件夹下生成的exe程序是,窗口就不显示了,从任务管理器看了一下,相应的进程名出现了一下,然后就消失了,期间也没有任何的报错,我的系统是win7,我不知道这是什么情况?


请高手指点!

...全文
3050 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
worldofwest 2013-11-28
  • 打赏
  • 举报
回复
应该是电脑的问题,换了AE版本,换了电脑,好了!
gisweis 2013-11-26
  • 打赏
  • 举报
回复
要看你运行的环境: 1、用Ae开发的程序,要在安装了RunTime的客户机上才能运行 2、另外,程序开发中所用到的运行库都要在运行时能找到连上
GISDev125 2013-11-25
  • 打赏
  • 举报
回复
拿这个去用用吧。 using System; using ESRI.ArcGIS.esriSystem; namespace ds.kernel.gis.arcgis { public static class ArcEngineLicense { private static log4net.ILog log = log4net.LogManager.GetLogger(typeof(ArcEngineLicense)); public static bool ExtensionSpatialAnalystChecked = false; public static bool Extension3DAnalystChecked = false; public static bool ExtensionNetworkChecked = false; public static bool IsInitialized { get; private set; } //初始化ArcObjects的许可证 public static bool InitializeArcObjects() { try { IAoInitialize aoInit = new AoInitialize(); if (InitializeaLicenseArcEngine(ref aoInit) == false) { if (InitializeaLicenseArcInfo(ref aoInit) == false) { if (InitializeaLicenseArcEditor(ref aoInit) == false) { if (InitializeaLicenseArcView(ref aoInit) == false) { IsInitialized = false; return false; } } } } ExtensionSpatialAnalystChecked = CheckOutLicenseExtension(ref aoInit, esriLicenseExtensionCode.esriLicenseExtensionCodeSpatialAnalyst); Extension3DAnalystChecked = CheckOutLicenseExtension(ref aoInit, esriLicenseExtensionCode.esriLicenseExtensionCode3DAnalyst); ExtensionNetworkChecked = CheckOutLicenseExtension(ref aoInit, esriLicenseExtensionCode.esriLicenseExtensionCodeNetwork); IsInitialized = true; return true; } catch (Exception ex) { log.Info("初始化ArcEngine异常"); } return false; } //签出产品许可 private static bool CheckOutLicenseMain(ref IAoInitialize aoInit, esriLicenseProductCode code) { string productname = (aoInit as ILicenseInformation).GetLicenseProductName(code); string info = string.Format("初始化ArcEngine产品许可[{0}]权限", productname); try { if (aoInit.IsProductCodeAvailable(code) == esriLicenseStatus.esriLicenseAvailable) { if (aoInit.Initialize(code) == esriLicenseStatus.esriLicenseCheckedOut) { log.Info(info + "成功"); return true; } else { log.Info(info + "失败"); } } } catch (Exception ex) { log.Info(info + "异常"); } return false; } //签出扩展许可 private static bool CheckOutLicenseExtension(ref IAoInitialize aoInit, esriLicenseExtensionCode code) { string extensionname = (aoInit as ILicenseInformation).GetLicenseExtensionName(code); string info = string.Format("初始化ArcEngine产扩展许可[{0}]权限", extensionname); try { if (aoInit.CheckOutExtension(code) == esriLicenseStatus.esriLicenseCheckedOut) { log.Info(info + "成功"); return true; } else { log.Info(info + "失败"); } } catch (Exception ex) { log.Info(info + "异常"); } return false; } public static bool InitializeaLicenseArcEngine(ref IAoInitialize aoInit) { return CheckOutLicenseMain(ref aoInit, esriLicenseProductCode.esriLicenseProductCodeEngine); } public static bool InitializeaLicenseArcInfo(ref IAoInitialize aoInit) { #if ArcGIS9x return CheckOutLicenseMain(ref aoInit, esriLicenseProductCode.esriLicenseProductCodeArcInfo); #else return CheckOutLicenseMain(ref aoInit, esriLicenseProductCode.esriLicenseProductCodeAdvanced); #endif } public static bool InitializeaLicenseArcEditor(ref IAoInitialize aoInit) { #if ArcGIS9x return CheckOutLicenseMain(ref aoInit, esriLicenseProductCode.esriLicenseProductCodeArcEditor); #else return CheckOutLicenseMain(ref aoInit, esriLicenseProductCode.esriLicenseProductCodeStandard); #endif } public static bool InitializeaLicenseArcView(ref IAoInitialize aoInit) { #if ArcGIS9x return CheckOutLicenseMain(ref aoInit, esriLicenseProductCode.esriLicenseProductCodeArcView); #else return CheckOutLicenseMain(ref aoInit, esriLicenseProductCode.esriLicenseProductCodeBasic); #endif } public static bool InitializeaLicenseArcServer(ref IAoInitialize aoInit) { return CheckOutLicenseMain(ref aoInit, esriLicenseProductCode.esriLicenseProductCodeArcServer); } } }
worldofwest 2013-11-25
  • 打赏
  • 举报
回复
程序可以调试,不能运行。
worldofwest 2013-11-22
  • 打赏
  • 举报
回复
引用 11 楼 liliooo 的回复:
[quote=引用 10 楼 worldofwest 的回复:] [quote=引用 8 楼 liliooo 的回复:] [quote=引用 楼主 worldofwest 的回复:] 我用ArcGis engine+c#开发时,发现了这么一个问题:在vs2005中编译运行时,程序可以运行,但是,点击工程的bin文件夹下生成的exe程序是,窗口就不显示了,从任务管理器看了一下,相应的进程名出现了一下,然后就消失了,期间也没有任何的报错,我的系统是win7,我不知道这是什么情况? 请高手指点!
楼主没有初始化权限吧,AE开发都需要的,不然跑不起来的。[/quote] 这个怎么初始化?我已经把licence控件拖进去了。[/quote] 你查一下IAoInitialize接口吧[/quote] // 创建新的AoInitialize对象 if (m_AoInitialize == null) { System.Windows.Forms.MessageBox.Show( "初始化失败,程序不能运行!"); this.Close(); } // 判断产品是否有效 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( "初始化失败,应用程序不能运行!"); this.Close(); } } else { System.Windows.Forms.MessageBox.Show( "ArcGIS Engine产品无效,此程序不能运行!"); this.Close(); } 这些还不够么?
GISDev125 2013-10-22
  • 打赏
  • 举报
回复
引用 10 楼 worldofwest 的回复:
[quote=引用 8 楼 liliooo 的回复:] [quote=引用 楼主 worldofwest 的回复:] 我用ArcGis engine+c#开发时,发现了这么一个问题:在vs2005中编译运行时,程序可以运行,但是,点击工程的bin文件夹下生成的exe程序是,窗口就不显示了,从任务管理器看了一下,相应的进程名出现了一下,然后就消失了,期间也没有任何的报错,我的系统是win7,我不知道这是什么情况? 请高手指点!
楼主没有初始化权限吧,AE开发都需要的,不然跑不起来的。[/quote] 这个怎么初始化?我已经把licence控件拖进去了。[/quote] 你查一下IAoInitialize接口吧
shujujiegougou 2013-10-18
  • 打赏
  • 举报
回复
你打开你的许可管理器,看看机器上的ArcGIS系列许可启动了吗?
worldofwest 2013-10-18
  • 打赏
  • 举报
回复
引用 8 楼 liliooo 的回复:
[quote=引用 楼主 worldofwest 的回复:] 我用ArcGis engine+c#开发时,发现了这么一个问题:在vs2005中编译运行时,程序可以运行,但是,点击工程的bin文件夹下生成的exe程序是,窗口就不显示了,从任务管理器看了一下,相应的进程名出现了一下,然后就消失了,期间也没有任何的报错,我的系统是win7,我不知道这是什么情况? 请高手指点!
楼主没有初始化权限吧,AE开发都需要的,不然跑不起来的。[/quote] 这个怎么初始化?我已经把licence控件拖进去了。
worldofwest 2013-10-18
  • 打赏
  • 举报
回复
GISDev125 2013-10-18
  • 打赏
  • 举报
回复
引用 楼主 worldofwest 的回复:
我用ArcGis engine+c#开发时,发现了这么一个问题:在vs2005中编译运行时,程序可以运行,但是,点击工程的bin文件夹下生成的exe程序是,窗口就不显示了,从任务管理器看了一下,相应的进程名出现了一下,然后就消失了,期间也没有任何的报错,我的系统是win7,我不知道这是什么情况? 请高手指点!
楼主没有初始化权限吧,AE开发都需要的,不然跑不起来的。
mjordans530 2013-10-17
  • 打赏
  • 举报
回复
http://www.51zxw.net/study.asp?vip=8102614
clever101 2013-10-17
  • 打赏
  • 举报
回复
用depends将exe打开,贴张图上来,看看exe程序依赖哪些dll。
worldofwest 2013-10-17
  • 打赏
  • 举报
回复
程序代码就是网上普通的学习例子。感谢大神回复,这些不够的话,我再贴。 public partial class Form1 : Form { // 应用初始化对象 private IAoInitialize m_AoInitialize = new AoInitializeClass(); private ESRI.ArcGIS.Controls.IMapControl3 m_mapControl = null; private ESRI.ArcGIS.Controls.IPageLayoutControl2 m_pageLayoutControl = null; private IMapDocument pMapDocument; private ControlsSynchronizer m_controlsSynchronizer = null;//同步 //右键菜单 //TOCControl控件变量 private ITOCControl2 m_tocControl = null; //TOCControl中Map菜单 private IToolbarMenu m_menuMap = null; //TOCControl中图层菜单 private IToolbarMenu m_menuLayer = null; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { // 创建新的AoInitialize对象 if (m_AoInitialize == null) { System.Windows.Forms.MessageBox.Show( "初始化失败,程序不能运行!"); this.Close(); } // 判断产品是否有效 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( "初始化失败,应用程序不能运行!"); this.Close(); } } else { System.Windows.Forms.MessageBox.Show( "ArcGIS Engine产品无效,此程序不能运行!"); this.Close(); } // 取得 MapControl 和 PageLayoutControl 的引用 m_mapControl = (IMapControl3)this.axMapControl1.Object; m_pageLayoutControl = (IPageLayoutControl2)this.axPageLayoutControl1.Object; //初始化controls synchronization calss m_controlsSynchronizer = new ControlsSynchronizer(m_mapControl, m_pageLayoutControl); //把MapControl和PageLayoutControl绑定起来(两个都指向同一个Map),然后设置MapControl为活动的Control m_controlsSynchronizer.BindControls(true); //为了在切换MapControl和PageLayoutControl视图同步,要添加Framework Control m_controlsSynchronizer.AddFrameworkControl(axToolbarControl1.Object); m_controlsSynchronizer.AddFrameworkControl(this.axTOCControl1.Object); // 添加打开命令按钮到工具条 OpenNewMapDocument openMapDoc = new OpenNewMapDocument(m_controlsSynchronizer); axToolbarControl1.AddItem(openMapDoc, -1, 0, false, -1, esriCommandStyles.esriCommandStyleIconOnly); //右键菜单 m_menuMap = new ToolbarMenuClass(); m_menuLayer = new ToolbarMenuClass(); m_tocControl = (ITOCControl2)this.axTOCControl1.Object; //添加自定义菜单项到TOCCOntrol的Map菜单中 //打开文档菜单 m_menuMap.AddItem(new OpenNewMapDocument(m_controlsSynchronizer), -1, 0, false, esriCommandStyles.esriCommandStyleIconAndText); //添加数据菜单 m_menuMap.AddItem(new ControlsAddDataCommandClass(), -1, 1, false, esriCommandStyles.esriCommandStyleIconAndText); //打开全部图层菜单 m_menuMap.AddItem(new LayerVisibility(), 1, 2, false, esriCommandStyles.esriCommandStyleTextOnly); //关闭全部图层菜单 m_menuMap.AddItem(new LayerVisibility(), 2, 3, false, esriCommandStyles.esriCommandStyleTextOnly); //以二级菜单的形式添加内置的“选择”菜单 m_menuMap.AddSubMenu("esriControls.ControlsFeatureSelectionMenu", 4, true); //以二级菜单的形式添加内置的“地图浏览”菜单 m_menuMap.AddSubMenu("esriControls.ControlsMapViewMenu", 5, true); //添加自定义菜单项到TOCCOntrol的图层菜单中 m_menuLayer = new ToolbarMenuClass(); //添加“移除图层”菜单项 m_menuLayer.AddItem(new RemoveLayer(), -1, 0, false, esriCommandStyles.esriCommandStyleTextOnly); //添加“放大到整个图层”菜单项 m_menuLayer.AddItem(new ZoomToLayer(), -1, 1, true, esriCommandStyles.esriCommandStyleTextOnly); //设置菜单的Hook m_menuLayer.SetHook(m_mapControl); m_menuMap.SetHook(m_mapControl); }
clever101 2013-10-17
  • 打赏
  • 举报
回复
贴程序入口点的代码。

2,141

社区成员

发帖
与我相关
我的任务
社区描述
它是一种特定的十分重要的空间信息系统。它是在计算机硬、软件系统支持下,对整个或部分地球表层(包括大气层)空间中的有关地理分布数据进行采集、储存、管理、运算、分析、显示和描述的技术系统。
社区管理员
  • 地理信息系统
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧