我意识到这是几个月前发生的,当我关闭另一个实例后,无法在ArcMap实例中更改表结构时。
例如,当我在ArcMap中将某些字段删除或添加到要素类中时,保存并关闭文档并打开ArcCatalog并尝试删除该特定要素类,我得到了Delete Failed:无法删除所选对象( s)错误。当打开包含我要删除的图层的ArcMap实例时,通常会发生这种情况,因此解决方法是启动Windows任务管理器并杀死由于某些原因仍打开的ArcMap.exe进程。
还有其他人遇到此问题吗?
现在正在运行SP3,但该问题尚未解决。
我在可比较的计算机上运行非常相似的设置,但那里没有此问题。
#1 楼
不是您的错,您也无能为力。但是,如果您对原因感到好奇,那么会发生什么事,就是有一个COM循环引用(最有可能是监听某些事件源的对象,例如Editor),而当应用程序试图退出它时,它却无法执行,因为某些对象正在保留彼此还活着。这可以来自您已安装的扩展,甚至可以来自ESRI代码本身。这曾经一直发生,并且可能仅在某些条件下才会表现出来,例如某些命令在工具栏中可见。摘自旧的ArcObjects COM概念教程:
当应用程序退出时,它释放对命令的引用。如果该命令还用作事件接收器,则应用程序将保留对该命令的另一个引用,除非该命令与源断开连接,否则该引用将无法释放。由于命令不知道除自身的析构函数之外还可以断开连接的点,因此这会导致循环引用,从而导致应用程序无法在不破坏命令的情况下退出并且命令的析构函数也不会被调用,因为应用程序拥有对命令的引用。这会导致应用程序在退出时挂起。
如果您更好奇,请删除(或备份)Normal.mxt,这将清除所有自定义项,并查看此问题是否仍然存在。
评论
+1很好的解释。让我想知道是否关闭除一个以外的所有命令栏,然后保存并退出并尝试重现该问题。我不认为ICommand.OnCreate会在工具栏可见之前被调用。如果逐渐打开工具栏并重复测试,则可以缩小可疑命令的范围。
– Kirk Kuykendall
2011-10-18 2:53
很好的解释。谢谢。 @Kirk-我确实忘记了(ArcBruTile)的第3方工具,因此我将其删除。我的加载项确实确实进行了一些事件侦听,所以我想知道我的工具栏是否可能是问题的根源。奇怪的是,我在另一台计算机上具有相同的工具,并且加载了相同的默认工具栏集,而我在那里没有这个问题。我将尝试从新建Normal.mxt开始,这是一个很好的建议。
–雅库布·西萨克地理图形学
2011-10-18 12:45
同样,有时当仅可见的动作可能不一定足以引起循环引用时,可能需要发生一些事件才能使该条件显现出来。例如,该命令是可见的,并且一切都很好,等待“ StartEditing”事件发生。一旦触发,它决定开始获取对其他事物的引用-并在那里设置确实导致循环条件的其他引用。由于不确定的垃圾回收,这是VB扩展的一个经典问题,.NET命令甚至更多。
–拉吉·亚瑟(Ragi Yaser Burhum)
2011-10-18 13:42
#2 楼
感谢@Kirk和@Ragi解决了这个问题!这是我在监视任务管理器过程时所做的事情:备份并删除Normal.mxt
启动新的ArcMap文档(以默认配置打开的ArcMap)
关闭ArcMap(按预期关闭过程)
添加了Toobars:3D Analyst,高级编辑,数据框工具,绘制,编辑顶点,编辑器,地理参考,标签,布局,贴图
排列的工具栏
关闭ArcMap(过程按预期方式关闭)
开始新的ArcMap文档
添加了带有加载项的自定义工具栏
关闭ArcMap(过程按预期方式关闭)
开始了现有的ArcMap文档
在工具栏上使用了自定义开始和停止编辑以及几个自定义工具
关闭了ArcMap(按预期关闭了过程)
我还删除和删除了ArcBruTile
ArcMap流程现在已按预期关闭
评论
讲得太早了。问题又回来了。
–雅库布·西萨克地理图形学
2011年10月18日在20:17
不幸的是,当ESRI支持似乎无法正常工作时,一直在复制并粘贴以上答案作为解决方案:/
– MaryBeth
13年10月31日在21:28
@Jakub您是否找到解决此问题的方法?我正在创建一个插件,最近注意到退出后正在运行多个ArcMap进程。
–Barbarossa
15年9月18日在18:58
似乎已经达成共识,即该进程是由第三方添加/扩展程序打开的并且未正确关闭。我构建了自己的插件,我可能已经检查了所有代码,以确保所有对象都已释放,或者更有可能的是,ESRI已在源头修复了该问题,因为该问题不再在10.3中发生,并且我相信在10.2。如果仍然发生这种情况,请卸载和/或删除所有3rd party插件,然后查看问题是否仍然存在。如果不停转弯,则逐一添加以找出罪魁祸首。希望这可以帮助。
–雅库布·西萨克地理图形学
2015年9月21日在14:56
#3 楼
并非试图使这篇文章从死里逃生,而是在Citrix服务器上使用此问题与ESRI支持合作时(用户崩溃或注销,arcgiscachemanager.exe不会在20-30分钟后关闭,甚至不会关闭),用户无法重新登录ArcMap,然后他们必须依靠2位服务器管理员才能登录到服务器并手动释放他们),ESRI正在从此页面复制并粘贴解决方案,但此方法无效。至少在Citrix环境中工作时没有。对于Citrix,我们发现创建两个注册表项(一个用于杀死挂起的进程,一个用于将设置返回到其原始状态)可以解决该问题。
对于非Citrix,我们只是想创建一个脚本来杀死进程的想法,但是由于我们不在Citrix中,所以我们已经在服务器上,所以我们决定不使用它。没必要。
希望有帮助。
-------从升级的支持票中复制的数据--------
Citrix具有注册表项设置,可帮助管理在后台生成次级进程的应用程序。您有很多症状,应使此解决方案成为合理的设置。浏览以下Citrix知识文章:
从已发布的应用程序中正常注销使会话处于活动状态:http://support.citrix.com/article/CTX891671
从Windows Server 2003升级到Windows Server 2008的用户在XenApp环境中注销后的活动会话:http://support.citrix.com/article/CTX134956
XenApp 6.5 AppCenter控制台显示应用程序状态应用程序未运行:http://support.citrix.com/article/CTX133328
在这些文章中,它讨论了已发布的应用程序如何导致会话无法关闭或用户未正确注销。在这种情况下,必须由管理员重置或退出会话,或者通过终止仍在运行的服务器的进程来重置/退出会话。在Citrix中,您发布的主要应用程序是ArcMap。退出应用程序时(或崩溃时)仅关闭该exe文件。结果,在打开应用程序时产生的与该应用程序关联的所有exe都不会在Citrix中完全关闭,从而导致此状态。因此,当ArcGISCacheMgr.exe需要很长时间执行或应用程序崩溃时,最终用户将无法启动新会话。
本文讨论了如何将这些辅助过程添加到注册表项中在主应用程序关闭时自动关闭它们。您可以探索的另一个选项是注销脚本,以检查进程并终止它们(如果存在)。
#4 楼
创建一个.bat文件并将其粘贴并保存到桌面。 taskkill /IM ArcGisCacheMgr.exe /f
taskkill /IM ArcGisConnection.exe /f
"C:\Program Files (x86)\ArcGIS\Desktop10.1\bin\ArcMap.exe"
评论
解释这些命令(及其选项)的作用将有助于技术人员了解您的解决方案。
– hu
14年4月3日在16:01
#5 楼
SysInternals Suite中的PsKill(我认为这是一个非常强制性的工具包)可以链接到快捷方式,并可以随意触发以清理挂起的进程。这样做很丑陋,因为它无助于解决原始问题,但确实可以使问题快速有效地进行。pskill -t arcmap.exe
我一直在获取不可见的弧形图.exe最近每周执行几次,而不是以前经常执行,但是已经发生了一段时间。我通常使用并发许可。当我有多个活动的Arcmap会话时,这种情况似乎更经常发生。我们在64位Win7上使用Sophos防病毒软件。
评论
是!请在ESRI论坛上查看我的论坛帖子。我正在尝试复制它(似乎是随机的……),以便使用ESRI打开票证。您是否已加载任何第三方扩展?我想知道IExtension.Shutdown中的异常是否可以解释这一点。
@kirk我什么都没有,也从未在v10的此安装中安装任何东西。这甚至是Windows7的新安装。与您类似,此问题自SP1之前就一直存在。
您正在运行将近100个进程,这实际上可能是任何事情,但我对病毒扫描程序,备份软件和搜索索引服务最为怀疑。
@Kirk-此特定设置没有扩展名,但是上班时我会仔细检查。我有一些自己的附加工具。我在另一台Windows 7计算机上具有类似的设置,具有相同的加载项,并且在那里没有问题。