Domanda

Ho un servizio .NET Winddows, che viene eseguito con l'account di sistema locale. Questo servizio esegue quindi un componente COM che è stato scritto in ATL in Visual Studio 6 utilizzando COM Interop. Questo componente COM viene eseguito poi sotto l'account SYSTEM. So di poter impersonare un altro conto, ma per ora voglio lasciare le cose in cui sono.

Il problema è che dopo il servizio di Windows si ferma, i resti dei componenti COM in esecuzione. Non posso uccidere il processo sia. Task Manager non ucciderà così ho provato TaskKill dalla riga di comando. Questo dice anche che terminato il processo con successo ma quando posso controllare il responsabile di operazione è ancora in esecuzione. Ho provato PsKill ma che dice l'accesso negato.

Ho esaurito Google alla ricerca di una soluzione a questo. Chiunque può aiutare?

Inoltre, perché lo fa rimanere in esecuzione in ogni caso?

È stato utile?

Soluzione

Uccidere un processo è solo una questione di permessi. Supponendo Vista / 7 con UAC, non sarà in grado di uccidere un processo di sistema se non si sta eseguendo come amministratore. Nota - non è abbastanza per essere un membro del gruppo di amministratori locale. È necessario avviare task manager / Process Explorer / pskill o qualsiasi altra cosa con "Esegui come amministratore" per effettivamente eseguito con autorizzazioni amministrative. In caso contrario, sei solo un utente normale, e si è negato.

Per quanto riguarda il server COM attaccare in giro: server COM hanno un conteggio di riferimento, e loro stessi spegnere solo dopo il conteggio scende a 0. Nel tuo caso, il server potrebbe non chiudere a causa di un paio di motivi:

  1. Il suo cliente non rilascia correttamente tutte le istanze create dal server COM. Io non sono un programmatore .NET, quindi non posso dire se questo è qualcosa che si dovrebbe prendere cura di, o se la raccolta dei rifiuti fa per voi. Si avrà il problema di sicuro se il servizio viene chiuso senza ripulire correttamente, a seguito di un incidente o di terminazione esterna.
  2. Il server potrebbe aumentare il suo conteggio di riferimento interno, per qualsiasi motivo il creatore aveva in mente. Questo potrebbe anche essere un bug nel server.
  3. IIRC, COM potrebbe lasciare un server in esecuzione per un po ', anche se non ci sono clienti attivi. Se questo è il caso, il server si spegne dopo pochi minuti.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top