Процессы ArcMap.exe остаются открытыми после закрытия ArcMap? [закрыто]

23

Я понял, что это происходит несколько месяцев назад, когда я не смог изменить структуру таблицы в экземпляре ArcMap после закрытия другого экземпляра. Когда, например, я удаляю или добавляю некоторые поля в класс пространственных объектов в ArcMap, сохраняю и закрываю документ, открываю ArcCatalog и пытаюсь удалить этот конкретный класс пространственных объектов, я получаю сообщение «Ошибка удаления: не удалось удалить выбранные объекты». Обычно это происходит, когда открывается экземпляр ArcMap, содержащий слои, которые я пытаюсь удалить, поэтому обходной путь - запустить диспетчер задач Windows и завершить процессы ArcMap.exe, которые по какой-то причине все еще открыты.

У кого-нибудь еще есть эта проблема?

Сейчас работает SP3 и проблема не решена.

введите описание изображения здесь


Я запускаю очень похожую установку на сопоставимой машине, и у меня нет этой проблемы там.

Якуб Сисак География
источник
4
ДА! Пожалуйста, смотрите мой пост на форумах ESRI. Я пытаюсь воспроизвести его (кажется случайным ...), чтобы открыть билет с помощью ESRI.
SaultDon
У вас загружены сторонние расширения? Интересно, может ли это объяснить исключение в IExtension.Shutdown.
Кирк Куйкендалл
@kirk У меня их нет, и я никогда не устанавливал их на эту установку v10. Это даже новая установка windows7. Как и у вас, это сохраняется до SP1.
SaultDon
2
Вы запускаете почти 100 процессов, это может быть что угодно, но я бы больше всего с подозрением относился к антивирусным сканерам, программному обеспечению для резервного копирования и службам индексации поиска.
blah238
@Kirk - нет никаких расширений на этой конкретной установке, но я буду проверять, когда я доберусь до работы. У меня есть несколько собственных инструментов для добавления. У меня есть аналогичная установка на другом компьютере с Windows 7 с такими же надстройками и никаких проблем там нет.
Якуб Сисак GeoGraphics

Ответы:

18

Не твоя вина, и ты мало что можешь с этим поделать. Однако, если вам любопытно узнать причину, то происходит то, что существует циклическая ссылка COM (скорее всего, что-то прослушивающее некоторый источник событий - например, редактор), и когда приложения пытаются выйти из него, не могут, потому что некоторые объекты сохраняют друг друга живы. Это может быть из расширения, которое вы установили, или даже из самого кода ESRI. Раньше это происходило постоянно, и оно может проявляться только при определенных условиях, например, когда определенные команды видны на панели инструментов.

Из старого руководства ArcObjects по концепции COM :

Когда приложение закрывается, оно освобождает ссылку на команду. Если команда также служит приемником событий, приложение содержит другую ссылку на команду, которая не может быть освобождена, пока команда не отсоединится от источника. Поскольку команда не знает о точке, в которой она может отключиться, кроме своего деструктора, это вызывает циклическую ссылку, при которой приложение не может выйти без уничтожения команды, а деструктор команды никогда не вызывается, потому что приложение содержит ссылку на команду , Это приводит к зависанию приложения при выходе.

Если вам еще интереснее, удалите (или сделайте резервную копию) свой файл Normal.mxt, который уничтожит все настройки и покажет, сохраняется ли эта проблема.

Раги Язер Бурхум
источник
3
+1 хорошее объяснение. Заставляет меня задуматься, что если закрыть все панели команд, кроме одной, сохранить, выйти и попытаться воспроизвести проблему. Я не думаю, что ICommand.OnCreate вызывается до тех пор, пока не появится панель инструментов. Если вы постепенно включаете панели инструментов и повторяете тесты, возможно, вы могли бы сузить список подозрительных команд.
Кирк Кайкендалл
Хорошее объяснение. Спасибо. @Kirk - у меня есть сторонний инструмент, о котором я забыл (ArcBruTile), я его удалю. Моя надстройка действительно прослушивает некоторые события, поэтому мне интересно, что моя панель инструментов может быть источником проблемы. Странно то, что на моем другом компьютере установлены те же инструменты, что и загруженный набор инструментов по умолчанию, и у меня нет этой проблемы. Я попытаюсь начать с нового Normal.mxt, это хорошее предложение.
Якуб Сисак GeoGraphics
Кроме того, иногда, когда акта видимости просто не обязательно достаточно, чтобы вызвать круговую ссылку - может потребоваться какое-то событие, чтобы это состояние проявилось. Например, команда может быть видимой, и все в порядке, ожидая события «StartEditing». Как только это срабатывает, он решает начать захват ссылок на другие вещи - и там он устанавливает свои другие ссылки, которые вызывают циклическое условие. Это была классическая проблема с расширениями VB и даже больше с командами .NET из-за недетерминированной сборки мусора
Ragi Yaser Burhum
2

Спасибо @Kirk и @Ragi за решение этой проблемы! Вот что я сделал во время мониторинга процессов диспетчера задач:

  1. Резервное копирование и удаление Normal.mxt
  2. Запущен новый документ ArcMap (ArcMap открывается в конфигурации по умолчанию)
  3. Закрыто ArcMap (Процесс закрыт, как и ожидалось)
  4. Добавлены Toobars: 3D Analyst, Расширенное редактирование, Инструменты фрейма данных, Рисование, Редактирование вершин, Редактор, Геопривязка, Маркировка, Макет, Привязка
  5. Расположенные панели инструментов
  6. Закрыто ArcMap (Процесс закрыт, как и ожидалось)
  7. Запущен новый документ ArcMap
  8. Добавлена ​​моя собственная панель инструментов с надстройками
  9. Закрыто ArcMap (Процесс закрыт, как и ожидалось)
  10. Запущен существующий документ ArcMap
  11. Использовал пользовательский запуск и остановку редактирования на моей панели инструментов, а также несколько пользовательских инструментов
  12. Закрыто ArcMap (Процесс закрыт, как и ожидалось)

Я также удалил и удалил ArcBruTile

Процессы ArcMap теперь закрываются, как и ожидалось

Якуб Сисак География
источник
2
говорил слишком рано. Проблема вернулась.
Якуб Сисак GeoGraphics
К сожалению, поддержка ESRI копировала и вставляла приведенный выше ответ как решение, когда оно, похоже, не работает: /
MaryBeth
@Jakub Вы когда-нибудь находили решение этой проблемы? Я создаю надстройку и недавно заметил несколько процессов ArcMap, запущенных после выхода.
Барбаросса
Кажется, что консенсус заключается в том, что процессы открываются и не закрываются должным образом сторонними надстройками / расширениями. Я создаю свои собственные надстройки и, возможно, только что просмотрел весь свой код, чтобы убедиться, что все объекты освобождены, или, что более вероятно, проблема была исправлена ​​в источнике ESRI, поскольку она больше не происходит в 10.3, и я считаю, что она уже исчезла в 10,2. Если это все еще происходит, удалите и / или удалите ВСЕ сторонние надстройки и посмотрите, сохраняется ли проблема. Если не продолжать поворачивать, добавляя один за другим, чтобы найти виновника. Надеюсь это поможет.
Якуб Сисак GeoGraphics
2

Не пытаясь вернуть этот пост из мертвых, но при работе с поддержкой ESRI по этому вопросу на сервере Citrix (пользователи аварийно завершают работу или выходят из системы, arcgiscachemanager.exe не закрывается через 20-30 минут или более, если это вообще происходит, пользователи не могут вернуться в ArcMap, а затем им приходится полагаться на двух администраторов сервера, которые могут войти на сервер и вручную освободить их), ESRI копирует и вставляет решение с этой страницы, и оно не работает. По крайней мере, при работе в среде Citrix.

Для Citrix мы обнаружили, что создание двух ключей реестра (один для уничтожения зависшего процесса, другой для возврата настроек в исходное состояние) «устранило» проблему.

Для не-Citrix мы играли с идеей просто создать сценарий, чтобы убить процесс, но так как, когда мы не в Citrix, мы уже на сервере, мы решили, что в этом нет необходимости.

Надеюсь это поможет.

------- скопированные данные из расширенной заявки в службу поддержки -------- Citrix имеет параметры ключа реестра, которые помогут управлять приложениями, которые порождают вторичные процессы в фоновом режиме. У вас много симптомов, которые должны сделать это решение приемлемым. Просмотрите следующие статьи знаний Citrix:

Изящный выход из опубликованного приложения переводит сеанс в активное состояние: http://support.citrix.com/article/CTX891671

Активные сеансы после выхода пользователя из системы в среде XenApp при обновлении с Windows Server 2003 до Windows Server 2008: http://support.citrix.com/article/CTX134956

Консоль XenApp 6.5 AppCenter отображает состояние приложения Приложение не запущено: http://support.citrix.com/article/CTX133328

В этих статьях обсуждается, как опубликованные приложения могут привести к тому, что сеанс не закроется, или пользователь не выйдет из системы должным образом. В этих случаях сеансы должны были быть сброшены администратором или завершены с помощью завершения процесса с сервера, который все еще работал. В Citrix происходит то, что вы публикуете основное приложение, в вашем случае ArcMap. Только этот exe-файл закрывается при выходе из приложения (или в случае его сбоя). В результате любые исполняемые файлы, связанные с приложением, которые были созданы при открытии приложения, не будут полностью закрыты в Citrix, что приведет к этому состоянию. Поэтому, когда выполнение ArcGISCacheMgr.exe занимает много времени или происходит сбой приложения, ваши конечные пользователи не могут начать новый сеанс.

В статьях обсуждается, как можно добавить эти вторичные процессы в раздел реестра, чтобы автоматически закрывать их при закрытии основного приложения. Другой вариант, который вы можете изучить, - это сценарий выхода из системы, чтобы проверить процессы и завершить их, если они существуют.

Marybeth
источник
2

Создайте файл .bat, вставьте его и сохраните на рабочий стол.

 taskkill /IM ArcGisCacheMgr.exe /f
 taskkill /IM ArcGisConnection.exe /f
 "C:\Program Files (x86)\ArcGIS\Desktop10.1\bin\ArcMap.exe"
Shane
источник
4
Объяснение того, что делают эти команды (и их параметры), поможет непосвященному понять ваше решение.
whuber
1

PsKill из SysInternals Suite (на мой взгляд, чертовски почти обязательный инструментарий) можно связать с ярлыком и запускать по желанию для очистки зависших процессов. Это уродливо в том смысле, что ничего не решает исходную проблему, но позволяет действовать быстро и эффективно.

pskill -t arcmap.exe

В последнее время я получаю невидимые процессы arcmap.exe несколько раз в неделю, не так часто раньше, но это происходило в течение некоторого времени. Я обычно использую параллельное лицензирование. Кажется, это происходит чаще, когда у меня активен более одного сеанса Arcmap. Мы используем антивирус Sophos, на 64-битной Win7.

Мэтт Уилки
источник