I processi ArcMap.exe rimangono aperti dopo la chiusura di ArcMap? [chiuso]


23

Mi sono reso conto che ciò stava accadendo mesi fa quando non ero in grado di modificare la struttura della tabella in un'istanza di ArcMap dopo che un'altra istanza era stata chiusa. Quando, ad esempio, rimuovo o aggiungo alcuni campi a una classe di funzionalità in ArcMap, salvo e chiudo il documento e apro ArcCatalog e tento di eliminare quella particolare classe di funzionalità ottengo l'errore Elimina non riuscito: impossibile eliminare l'errore degli oggetti selezionati. Questo di solito accade quando viene aperta un'istanza di ArcMap che contiene livelli che sto tentando di eliminare, quindi la soluzione alternativa consiste nell'accendere il Task Manager di Windows e uccidere i processi ArcMap.exe che per qualche motivo sono ancora aperti.

Qualcun altro ha questo problema?

Ora esegue SP3 e il problema non è stato risolto.

inserisci qui la descrizione dell'immagine


Sto eseguendo una configurazione molto simile su una macchina comparabile e non ho questo problema lì.


4
SÌ! Si prega di consultare il mio post sul forum sui forum ESRI. Sto cercando di riprodurlo (sembra casuale ...) per ottenere un biglietto aperto con ESRI.
SaultDon

Hai delle estensioni di terze parti caricate? Mi chiedo se un'eccezione in IExtension.Shutdown potrebbe spiegare questo.
Kirk Kuykendall,

@kirk Non ne ho e non ne ho mai installato nessuno su questa installazione di v10. Questa è anche una nuova installazione di Windows 7. Simile a te, questo è persistito da prima di SP1.
SaultDon

2
Stai eseguendo quasi 100 processi, potrebbe essere qualsiasi cosa, ma sarei più sospettoso di scanner antivirus, software di backup e servizi di indicizzazione delle ricerche.
blah238,

@Kirk: nessuna estensione in questa particolare configurazione, ma ricontrollerò quando arrivo al lavoro. Ho alcuni dei miei strumenti aggiuntivi. Ho una configurazione simile su un'altra macchina Windows 7 con gli stessi componenti aggiuntivi e senza problemi lì.
Jakub Sisak GeoGraphics,

Risposte:


18

Non è colpa tua e non puoi fare molto al riguardo. Tuttavia, se sei curioso del motivo, ciò che accade è che esiste un riferimento circolare COM (molto probabilmente qualcosa che ascolta una fonte di eventi - come l'Editor) e quando le applicazioni tentano di uscire non può, perché alcuni oggetti mantengono l'un l'altro vivo. Ciò può provenire da un'estensione installata o persino dal codice ESRI stesso. Questo accadeva sempre e può manifestarsi solo in determinate condizioni, come alcuni comandi che sono visibili nella barra degli strumenti.

Da un vecchio tutorial di ArcObjects sui concetti COM :

Quando l'applicazione viene chiusa, rilascia il riferimento che contiene al comando. Se il comando funge anche da sink di evento, l'applicazione contiene un altro riferimento al comando, che non può essere rilasciato fino a quando il comando non si disconnette dall'origine. Poiché il comando non è a conoscenza di un punto in cui può disconnettersi diverso dal proprio distruttore, ciò provoca un riferimento circolare in base al quale l'applicazione non può uscire senza la distruzione del comando e il distruttore del comando non viene mai chiamato perché l'applicazione contiene un riferimento al comando . Ciò causa il blocco dell'applicazione all'uscita.

Se sei ancora più curioso, elimina (o esegui il backup) il tuo Normal.mxt, che cancellerà tutte le personalizzazioni e vedrà se il problema persiste.


3
+1 buona spiegazione. Mi chiedo se chiudere tutte le barre dei comandi tranne una, quindi salvare ed uscire e provare a riprodurre il problema. Non credo che ICommand.OnCreate venga chiamato finché la barra degli strumenti non è visibile. Se si attivano gradualmente le barre degli strumenti e si ripetono i test, è possibile restringere l'elenco dei comandi sospetti.
Kirk Kuykendall,

Buona spiegazione Grazie. @Kirk - Ho uno strumento di terze parti di cui mi sono dimenticato (ArcBruTile) che lo rimuoverò. Il mio componente aggiuntivo fa davvero qualche ascolto di eventi, quindi mi chiedo che la mia barra degli strumenti possa essere la fonte del problema. La cosa strana è che ho gli stessi strumenti sull'altra mia macchina e lo stesso set di barre degli strumenti predefinite caricate e non ho questo problema lì. Proverò a iniziare con un normale Normal.mxt, questo è un buon suggerimento.
Jakub Sisak GeoGraphics,

Inoltre, a volte quando l'atto di essere appena visibile potrebbe non essere necessariamente sufficiente per causare il riferimento circolare - potrebbe essere necessario un evento perché tale condizione si manifesti. Ad esempio, il comando può essere visibile e tutto è a posto e in attesa che si verifichi l'evento "StartEditing". Una volta che si innesca, decide di iniziare ad afferrare riferimenti ad altre cose - e lì stabilisce altri riferimenti che causano la condizione circolare. Questo era un problema classico con le estensioni VB e ancora di più con i comandi .NET a causa della garbage collection non deterministica
Ragi Yaser Burhum,

2

Grazie @Kirk e @Ragi per aver risolto questo problema! Ecco cosa ho fatto durante il monitoraggio dei processi di Task Manager:

  1. Backup e cancellazione di Normal.mxt
  2. Avviato nuovo documento ArcMap (ArcMap aperto nella configurazione predefinita)
  3. ArcMap chiusa (processo chiuso come previsto)
  4. Toobar aggiunti: Analista 3D, Modifica avanzata, Strumenti cornice dati, Disegna, Modifica vertici, Editor, Georeferenziazione, Etichettatura, Layout, Snap
  5. Barre degli strumenti organizzate
  6. ArcMap chiusa (processo chiuso come previsto)
  7. Inizia il nuovo documento ArcMap
  8. Aggiunta la mia barra degli strumenti personalizzata con componenti aggiuntivi
  9. ArcMap chiusa (processo chiuso come previsto)
  10. Avviato un documento ArcMap esistente
  11. Ho usato la funzione di avvio e arresto personalizzati sulla mia barra degli strumenti, nonché diversi strumenti personalizzati
  12. ArcMap chiusa (processo chiuso come previsto)

Ho anche rimosso ed eliminato ArcBruTile

I processi ArcMap ora si chiudono come previsto


2
parlato troppo presto. Il problema è tornato.
Jakub Sisak GeoGraphics,

Sfortunatamente, il supporto ESRI ha copiato e incollato la risposta di cui sopra come soluzione, quando non sembra funzionare: /
MaryBeth

@Jakub Hai mai trovato una soluzione a questo problema? Sto creando un componente aggiuntivo e recentemente ho notato che più processi ArcMap sono in esecuzione dopo essere usciti.
Barbarossa,

Sembra che il consenso sia che i processi sono aperti e non correttamente chiusi da componenti aggiuntivi / estensioni di terze parti. Costruisco i miei componenti aggiuntivi e potrei aver esaminato tutto il mio codice assicurandomi che tutti gli oggetti siano stati rilasciati o, e più probabilmente, il problema è stato risolto alla fonte da ESRI in quanto non si verifica più nella 10.3 e credo che sia già scomparso in 10.2. Se il problema persiste, disinstallare e rimuovere TUTTI i componenti aggiuntivi di terze parti e vedere se il problema persiste. Se non continuare a girare, aggiungendo uno per uno per individuare il colpevole. Spero che sia di aiuto.
Jakub Sisak GeoGraphics,

2

Non tentando di riportare questo post da zero, ma mentre si lavora con il supporto ESRI su questo problema con un server Citrix (gli utenti si bloccano o si disconnettono, arcgiscachemanager.exe non si chiude 20-30 minuti dopo o più, se non del tutto, gli utenti non possono tornare ad ArcMap e quindi devono fare affidamento su 2 amministratori del server per essere disponibili per accedere al server e rilasciarli manualmente), ESRI sta copiando e incollando una soluzione da questa pagina e non funziona. Almeno non quando si lavora in un ambiente Citrix.

Per Citrix, abbiamo scoperto che la creazione di due chiavi di registro (una per interrompere il processo bloccato, una per riportare le impostazioni al loro stato originale) "risolto" il problema.

Per i non-Citrix, ci siamo divertiti con l'idea di creare uno script per terminare il processo, ma da quando non siamo in Citrix, siamo già sul server, abbiamo deciso che non era necessario.

Spero che sia di aiuto.

------- dati copiati dal ticket di supporto intensificato -------- Citrix ha le impostazioni della chiave di registro che aiuteranno a gestire le applicazioni che generano processi secondari in background. Hai molti sintomi che dovrebbero rendere questa soluzione una configurazione plausibile. Dai un'occhiata ai seguenti articoli della conoscenza Citrix:

La disconnessione graziosa da un'applicazione pubblicata rende la sessione in stato attivo: http://support.citrix.com/article/CTX891671

Sessioni attive dopo che l'utente si disconnette in un ambiente XenApp quando viene aggiornato da Windows Server 2003 a Windows Server 2008: http://support.citrix.com/article/CTX134956

XenApp 6.5 AppCenter Console visualizza lo stato dell'applicazione Applicazione non in esecuzione: http://support.citrix.com/article/CTX133328

In questi articoli, viene illustrato come le applicazioni pubblicate possono impedire la chiusura di una sessione o la disconnessione di un utente. In questi casi, le sessioni dovevano essere ripristinate / chiuse da un amministratore o terminando il processo dal server che era ancora in esecuzione. Quello che succede in Citrix è che pubblichi l'applicazione principale, nel tuo caso ArcMap. Solo tale exe viene chiuso all'uscita da un'applicazione (o se si blocca). Di conseguenza, tutti gli ex associati all'applicazione che sono stati generati quando l'applicazione è stata aperta non vengono chiusi completamente in Citrix risultando in questo stato. Pertanto, quando ArcGISCacheMgr.exe richiede molto tempo per l'esecuzione o l'applicazione si arresta in modo anomalo, gli utenti finali non sono in grado di avviare una nuova sessione.

Gli articoli descrivono come aggiungere questi processi secondari a una chiave di registro per chiuderli automaticamente alla chiusura dell'applicazione principale. Un'altra opzione che è possibile esplorare è uno script di disconnessione per verificare i processi e terminarli se esistono.


2

Crea un file .bat e incollalo e salvalo sul desktop.

 taskkill /IM ArcGisCacheMgr.exe /f
 taskkill /IM ArcGisConnection.exe /f
 "C:\Program Files (x86)\ArcGIS\Desktop10.1\bin\ArcMap.exe"

4
Una spiegazione di ciò che stanno facendo questi comandi (e le loro opzioni) aiuterebbe i non iniziati a capire la tua soluzione.
whuber

1

PsKill della Suite SysInternals (un dannato kit di strumenti obbligatori secondo me) può essere collegato a una scorciatoia e lanciato a volontà per ripulire i processi sospesi. Farlo è brutto in quanto non fa nulla per risolvere il problema originale, ma consente di andare avanti in modo rapido ed efficiente.

pskill -t arcmap.exe

Recentemente ho ricevuto processi invisibili di arcmap.exe più volte alla settimana, non molto spesso prima, ma è successo da qualche tempo. Di solito utilizzo licenze simultanee. Sembra succedere più spesso quando ho più di una sessione Arcmap attiva. Usiamo l'antivirus Sophos, su Win7 a 64 bit.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.