Les processus ArcMap.exe restent ouverts après la fermeture d'ArcMap? [fermé]

23

J'ai réalisé que cela se produit il y a des mois lorsque je n'ai pas pu modifier la structure de la table dans une instance d'ArcMap après la fermeture d'une autre instance. Lorsque, par exemple, je supprime ou ajoute des champs à une classe d'entités dans ArcMap, j'enregistre et ferme le document et ouvre ArcCatalog et j'essaie de supprimer cette classe d'entités particulière. J'obtiens l'erreur Delete Failed: Impossible de supprimer les objets sélectionnés. Cela se produit généralement lorsqu'une instance d'ArcMap contenant des couches que j'essaie de supprimer est ouverte, la solution consiste donc à lancer le Gestionnaire des tâches de Windows et à tuer les processus ArcMap.exe qui, pour une raison quelconque, sont encore ouverts.

Quelqu'un d'autre a ce problème?

Maintenant en cours d'exécution SP3 et le problème n'a pas été résolu.

entrez la description de l'image ici


J'exécute une configuration très similaire sur une machine comparable et je n'ai pas ce problème là-bas.

Jakub Sisak GeoGraphics
la source
4
OUI! Veuillez consulter mon message sur le forum ESRI. J'essaie de le reproduire (semble aléatoire ...) pour obtenir un ticket ouvert avec ESRI.
SaultDon
Avez-vous des extensions tierces chargées? Je me demande si une exception dans IExtension.Shutdown pourrait expliquer cela.
Kirk Kuykendall
@kirk Je n'en ai pas et n'en ai jamais installé sur cette installation de v10. Il s'agit même d'une nouvelle installation de windows7. Comme vous, cela a persisté depuis avant le SP1.
SaultDon
2
Vous exécutez près de 100 processus, cela pourrait être n'importe quoi, mais je me méfierais le plus des antivirus, des logiciels de sauvegarde et des services d'indexation de recherche.
blah238
@Kirk - pas d'extensions sur cette configuration particulière mais je revérifierai quand j'arriverai au travail. J'ai quelques-uns de mes propres outils supplémentaires. J'ai une configuration similaire sur une autre machine Windows 7 avec les mêmes modules complémentaires et aucun problème là-bas.
Jakub Sisak GeoGraphics

Réponses:

18

Ce n'est pas votre faute et vous ne pouvez pas faire grand-chose. Cependant, si vous êtes curieux de savoir pourquoi, ce qui se passe est qu'il existe une référence circulaire COM (très probablement à quelque chose qui écoute une source d'événement - comme l'éditeur) et quand les applications tentent de le quitter ne le peuvent pas, car certains objets conservent mutuellement vivants. Cela peut provenir d'une extension que vous avez installée, ou même du code ESRI lui-même. Cela se produisait tout le temps et cela ne peut se manifester que dans certaines conditions, comme certaines commandes visibles dans la barre d'outils.

À partir d'un ancien didacticiel ArcObjects sur les concepts COM :

Lorsque l'application se ferme, elle libère la référence qu'elle détient à la commande. Si la commande sert également de récepteur d'événements, l'application contient une autre référence à la commande, qui ne peut pas être libérée tant que la commande ne se déconnecte pas de la source. Comme la commande ne connaît pas un point auquel elle peut se déconnecter autre que son propre destructeur, cela provoque une référence circulaire par laquelle l'application ne peut pas quitter sans que la commande ne soit détruite et le destructeur de la commande n'est jamais appelé car l'application contient une référence à la commande . Cela provoque le blocage de l'application à la sortie.

Si vous êtes encore plus curieux, supprimez (ou sauvegardez) votre Normal.mxt, qui effacera toutes les personnalisations et verra si ce problème persiste.

Ragi Yaser Burhum
la source
3
+1 bonne explication. Me fait me demander si fermer toutes les barres de commandes sauf une, puis enregistrer et quitter et essayer de reproduire le problème. Je ne pense pas que ICommand.OnCreate soit appelé jusqu'à ce que la barre d'outils soit visible. Si vous activez progressivement les barres d'outils et répétez les tests, vous pouvez peut-être affiner votre liste de commandes suspectes.
Kirk Kuykendall
Bonne explication. Merci. @Kirk - J'ai un outil tiers que j'ai oublié (ArcBruTile), je vais le supprimer. Mon complément fait en effet une écoute d'événements, donc je me demande si ma barre d'outils pourrait être la source du problème. La chose étrange est que j'ai les mêmes outils sur mon autre machine ainsi que le même ensemble de barre d'outils par défaut chargé et je n'ai pas ce problème là-bas. Je vais essayer de commencer avec un nouveau Normal.mxt, c'est une bonne suggestion.
Jakub Sisak GeoGraphics
De plus, parfois, lorsque l'acte d'être juste visible ne suffit pas nécessairement à provoquer la référence circulaire - il peut nécessiter qu'un événement se produise pour que cette condition se manifeste. Par exemple, la commande peut être visible et tout va bien et dandy en attendant que l'événement "StartEditing" se produise. Une fois que cela se déclenche, il décide de commencer à saisir des références à d'autres choses - et là, il configure ses autres références qui provoquent la condition circulaire. C'était un problème classique avec les extensions VB et encore plus avec les commandes .NET en raison de la récupération de place non déterministe
Ragi Yaser Burhum
2

Merci @Kirk et @Ragi d'avoir résolu ce problème! Voici ce que j'ai fait tout en surveillant les processus du gestionnaire de tâches:

  1. Sauvegardé et supprimé Normal.mxt
  2. Démarrage d'un nouveau document ArcMap (ArcMap ouvert dans la configuration par défaut)
  3. ArcMap fermé (processus fermé comme prévu)
  4. Barres supplémentaires: 3D Analyst, édition avancée, outils de trame de données, dessin, édition de sommets, éditeur, géoréférencement, étiquetage, mise en page, accrochage
  5. Barres d'outils disposées
  6. ArcMap fermé (processus fermé comme prévu)
  7. Démarrage d'un nouveau document ArcMap
  8. Ajout de ma propre barre d'outils personnalisée avec des compléments
  9. ArcMap fermé (processus fermé comme prévu)
  10. A commencé un document ArcMap existant
  11. Utilisé le démarrage et l'arrêt personnalisés de l'édition sur ma barre d'outils ainsi que plusieurs outils personnalisés
  12. ArcMap fermé (processus fermé comme prévu)

J'ai également supprimé et supprimé ArcBruTile

Les processus ArcMap se clôturent comme prévu

Jakub Sisak GeoGraphics
la source
2
a parlé trop tôt. Le problème est de retour.
Jakub Sisak GeoGraphics
Malheureusement, le support ESRI a copié et collé la réponse ci-dessus comme solution, alors qu'elle ne semble pas fonctionner: /
MaryBeth
@Jakub Avez-vous déjà trouvé une solution à ce problème? Je crée un complément et j'ai récemment remarqué plusieurs processus ArcMap en cours d'exécution après la fermeture.
Barbarossa
Il semble que le consensus est que les processus sont ouverts et mal fermés par des extensions / compléments tiers. Je construis mes propres compléments et je viens peut-être de parcourir tout mon code en m'assurant que tous les objets sont libérés ou, et plus probablement, le problème a été corrigé à la source par ESRI car il ne se produit plus dans 10.3 et je crois déjà disparu dans 10.2. Si cela se produit toujours, désinstallez et supprimez TOUS les compléments tiers et voyez si le problème persiste. Sinon, continuez à tourner, en ajoutant un par un pour localiser le coupable. J'espère que cela t'aides.
Jakub Sisak GeoGraphics
2

N'essayant pas de ramener ce post d'entre les morts, mais tout en travaillant avec le support ESRI sur ce problème avec un serveur Citrix (les utilisateurs se bloquent ou se déconnectent, arcgiscachemanager.exe ne se ferme pas 20-30 minutes plus tard ou plus, le cas échéant, les utilisateurs ne peuvent pas revenir à ArcMap, puis ils doivent compter sur 2 administrateurs de serveur pour être disponibles pour se connecter au serveur et les libérer manuellement), ESRI copie et colle une solution à partir de cette page et cela ne fonctionne pas. Du moins pas lorsque vous travaillez dans un environnement Citrix.

Pour Citrix, nous avons constaté que la création de deux clés de registre (une pour tuer le processus bloqué, une pour remettre les paramètres à leur état d'origine) "résolvait" le problème.

Pour les non-Citrix, nous avons joué avec l'idée de simplement créer un script pour tuer le processus, mais puisque lorsque nous ne sommes pas dans Citrix, nous sommes déjà sur le serveur, nous avons décidé que ce n'était pas nécessaire.

J'espère que cela t'aides.

------- données copiées à partir du ticket de support escaladé -------- Citrix a des paramètres de clé de registre qui aideront à gérer les applications qui engendrent des processus secondaires en arrière-plan. Vous avez beaucoup de symptômes qui devraient faire de cette solution une configuration plausible. Consultez les articles de connaissances Citrix suivants:

La déconnexion gracieuse d'une application publiée rend la session en état actif: http://support.citrix.com/article/CTX891671

Sessions actives après la fermeture de session de l'utilisateur dans un environnement XenApp lors de la mise à niveau de Windows Server 2003 vers Windows Server 2008: http://support.citrix.com/article/CTX134956

La console XenApp 6.5 AppCenter affiche l'état de l'application Application non exécutée: http://support.citrix.com/article/CTX133328

Dans ces articles, il explique comment les applications publiées peuvent empêcher une session de se fermer ou qu'un utilisateur ne soit pas correctement déconnecté. Dans ces cas, les sessions devaient être réinitialisées / fermées par un administrateur ou en mettant fin au processus à partir du serveur qui était toujours en cours d'exécution. Ce qui se passe dans Citrix, c'est que vous publiez l'application principale, dans votre cas ArcMap. Seul cet exe est fermé lors de la fermeture d'une application (ou s'il se bloque). Par conséquent, les exes associés à l'application qui ont été générés lors de son ouverture ne sont pas complètement fermés dans Citrix, ce qui entraîne cet état. Ainsi, lorsque ArcGISCacheMgr.exe prend du temps à s'exécuter ou que l'application se bloque, vos utilisateurs finaux ne peuvent plus démarrer une nouvelle session.

Les articles expliquent comment ajouter ces processus secondaires à une clé de Registre pour les fermer automatiquement à la fermeture de l'application principale. Une autre option que vous pouvez explorer est un script de déconnexion pour vérifier les processus et les terminer s'ils existent.

MaryBeth
la source
2

Créez un fichier .bat et collez-le et enregistrez-le sur le bureau.

 taskkill /IM ArcGisCacheMgr.exe /f
 taskkill /IM ArcGisConnection.exe /f
 "C:\Program Files (x86)\ArcGIS\Desktop10.1\bin\ArcMap.exe"
shane
la source
4
Une explication de ce que font ces commandes (et de leurs options) aiderait les non-initiés à comprendre votre solution.
whuber
1

PsKill de la suite SysInternals (une sacrée boîte à outils quasi obligatoire à mon avis) peut être lié à un raccourci et déclenché à volonté pour nettoyer les processus bloqués. Cela est moche en ce sens qu'il ne fait rien pour résoudre le problème d'origine, mais il permet de continuer rapidement et efficacement.

pskill -t arcmap.exe

J'ai reçu des processus arcmap.exe invisibles plusieurs fois par semaine récemment, pas si souvent auparavant, mais cela se produit depuis un certain temps. J'utilise généralement des licences simultanées. Cela semble se produire plus souvent lorsque j'ai plus d'une session Arcmap active. Nous utilisons l'antivirus Sophos, sur 64 bits Win7.

Matt Wilkie
la source