DLL - substituir dll em uso |
Top Previous Next |
Resumo: Ao criar um programa de instalação às vezes é necessário que o instalador substitua uma DLL. Entretanto, se ela estiver em uso, o Windows não permite que isto seja feito. Veja como deve-se fazer para substituir esta DLL no Boot do Windows.
Texto: Algum tempo atrás queria criar um pequeno instalador e me deparei com o problema de substituição de DLLs. Se ela já estiver em uso pelo sistema operacional, o Windows não permite esta substituição.
Pesquisando na documentação do MSDN verifiquei que o Windows possui um mecanismo para substituir arquivos em uso no próximo boot da máquina. É por isso que muitos instaladores requerem que a máquina seja reiniciada após a instalação de um software. Para realizar esta substituição faça o seguinte:
Salve a DLL com outro nome em um diretório temporário (deve estar no mesmo DRIVE que a DLL a ser substituida), e inclua o seguinte trecho de código em seu instalador.
if Win32Platform = VER_PLATFORM_WIN32_NT then MoveFileEx( PChar( tempFilenameWithPath ), PChar( DLLnameWithpath ), MOVEFILE_REPLACE_EXISTING or MOVEFILE_DELAY_UNTIL_REBOOT) else WritePrivateProfileString('rename', PChar( DLLNameWithpath ), PChar( tempFilenameWithPath ), 'wininit.ini' );
No caso de ser um Desinstalador, é possível também excluir um arquivo que esteja em uso passando "NULL" no parâmetro de destino do arquivo.
|