logo
Contato | Sobre...        
rebarba rebarba

Rodrigo Strauss :: Blog


Administrando: Substituindo um arquivo que está sendo usado

Um problema muito comum quando precisamos atualizar um arquivo em um servidor (geralmente DLLs) é o seguinte:

Temos duas soluções óbvias nesse caso:

  • Dar um boot no servidor e trocar o arquivo na volta do boot. Além de não funcionar algumas vezes (como na existência de um serviço que sobe no boot e usa o arquivo), em outras vezes não é possível (dar boot em um servidor de produção 3 da tarde?).
  • Renomear o arquivo atual e copiar o novo. Apesar de funcionar, não faz com que os programas que usam o arquivo o recarreguem.

O que causa esse problema é que muitas vezes não sabermos quem está usando o arquivo. Caso nosso arquivo seja uma DLL de um componente COM in process (DLL que é carregada no processo usuário) é praticamente impossível saber quem o carrega. Ou melhor, é impossível descobrir isso sem a ferramenta certa.

Caso seja um componente COM+ configurado como Server Application (ou seja, sua DLL é carregada em um dllhost.exe), é só mandar um shutdown no pacote e trocar a DLL. Mas apesar dessa facilidade, nem todos podem usá-la, já que isso aumenta o overhead do marshalling entre o processo usuário e o dllhost.exe. Além, é claro, de todas aquelas configurações de segurança.

E a solução do nosso problema, como sempre, passa por www.sysinternals.com. Baixe o Process Explorer, que é um substituto vitaminado para o Task Manager (Gerenciador de Tarefas) que existe no Windows. Dentre todas as informações que ele mostra sobre os processos, está também a lista de handles abertos (os de arquivos inclusive) e DLLs carregadas:

Apesar de bastante interessante, esse recurso não ajuda muito já que você precisa olhar em todos os processos. Até que fala mais alto seu instinto de usuário Microsoft e você tecla CTRL+F. Tudo resolvido:

Resolvido. Agora você sabe quais são os processos que estão usando o arquivo que você precisa trocar. Você pode até dar um kill no processo sem sair do Process Explorer :-)

PS: Quem acha que seria interessante se eu escrevesse sobre COM e COM+ levante a mão.


Em 11/04/2007 18:44, por Rodrigo Strauss


  
 
 
Comentários
Tomás | website | em 11/04/2007 | #
Mão pra cima
César | em 11/04/2007 | #
Mão pra cima
Tiago Albineli Motta | website | em 11/04/2007 | #
Mão levantada
Rodrigo Strauss | website | em 11/04/2007 | #
Uau. A Microsoft sempre diz que COM é legado, achei que ninguém mais usava ou se interessava.

Com licença: hehehahahahehaheha :-)
William Rodrigues | em 12/04/2007 | #
Salve!
Opa! eu também quero...

braços erguidos!!!
Maicon | em 12/04/2007 | #
em pé....ops..

mãos pra cima...

Tomás | website | em 17/04/2007 | #
Pode estar em desuso mas não deixa de ser uma boa idéia, tanto que a fundação Mozilla criou o XPCOM que é utilizado no Firefox e em outros produtos da fundação.....
Rodrigo Strauss | website | em 17/04/2007 | #
"Pode estar em desuso"

Não, não está. A Microsoft tenta criar esse clima para forçar todo mundo a migrar para .NET. Isso não é teoria da conspiração, a política deles é clara, veja em http://www.microsoft.com/com
Francismar A. Silva | website | em 20/04/2007 | #
Oi
As especificações versão 2.05a para OPC utilizam COM.
Esta é a versão mais utilizada no mundo, pois temos a opção dotNET.

[ ]'s
Rodrigo Strauss | website | em 20/04/2007 | #
¿
Francismar A. Silva | website | em 20/04/2007 | #
"Uau. A Microsoft sempre diz que COM é legado, achei que ninguém mais usava ou se interessava."

Apenas citei um exemplo de uso de COM.

[ ]'s
Rodrigo Strauss | website | em 20/04/2007 | #
Ah tá. Foi uma brincadeira, um monte de gente ainda usa COM hoje em dia, mesmo com a Microsoft pressionando para que seja feita a migração para .NET.
Marcos Velasco | website | em 23/04/2007 | #
Existe um programinha bem legal chamado "Unlocker":
http://ccollomb.free.fr/unlocker/

Ele é freeware e ajuda bastante na hora de "destravar" estes arquivos em uso...

Abraços
Marcos
Rodrigo Strauss | website | em 23/04/2007 | #
Legal Marcos, obrigado!
marconate | website | em 28/11/2007 | #
maos p cima...

esse post eh bem antigo, sera q conta?
rebarba rebarba
  ::::