Como transferir DLLs dependentes no Internet Explorer com um ficheiro .inf

Traduções de Artigos Traduções de Artigos
Artigo: 165075 - Ver produtos para os quais este artigo se aplica.
Expandir tudo | Reduzir tudo

Sumário

É frequentemente necessário transferir as DLLs dependentes juntamente com um controlo ActiveX. Os controlos MFC e o Visual Basic têm este requisito. Este artigo explicará três formas que pode efectuar este procedimento.

Mais Informação

Existem três formas de incluir DLLs dependentes a transferência para um controlo. A forma de primeira consiste em incluir o DLL(s) no ficheiro CAB para o controlo juntamente com os ficheiros OCX e INF. A desvantagem deste é que a DLL será transferida sempre que o controlo é transferido. Em alguns casos, isto é adequado. A forma seguinte é compactar DLL(s) dependentes num ficheiro CAB separado e consultar que no ficheiro INF para o controlo. A terceira forma também pacotes DLL num ficheiro CAB separado, mas o ficheiro CAB é referido no ficheiro de INF do controlo com uma rotina. A utilização de uma rotina permite o processo de transferência executar um ficheiro INF ou EXE contido no ficheiro CAB dependente.

Para adicionar uma dependência para um OCX (Simpdll.dll neste exemplo), uma secção semelhante da secção para o controlo é adicionada à secção [AddCode] do ficheiro INF:
   [Add.Code]
   TestDw.ocx=TestDw.ocx
   simpdll.dll=simpdll.dll
				
secção, em seguida, é adicionada ao ficheiro INF para controlar a instalação da DLL:
   [simpdll.dll]
   FileVersion=1,0,0,1
   file-win32-x86=thiscab
				
este é o primeiro método mencionado para incluir uma dependência DLL numa transferência.

Para incluir a DLL no ficheiro CAB separado, tudo o que é necessário é alterar a localização a partir de "thiscab" para o URL que CAB dependente ficará localizada:
File-Win32-x86=http://www.contoso.com/Controls/Dependent.cab
Neste caso, Simpdll.cab contém apenas simpdll.dll.

Várias dll podem ser adicionadas para os ficheiros INF e CAB acima se necessário.

A forma terceira pacote DLL dependentes é consultar CAB ficheiro a DLL dependente utilizando uma rotina. Com esta técnica, um ficheiro INF ou EXE in CAB dependente pode ser executado na transferência.

A secção seguinte de um ficheiro .inf controla a transferência DLL dependente para controlos MFC:
   [Add.Code]
   ...
   msvcrt.dll=msvcrt.dll
   mfc42.dll=mfc42.dll
   olepro32.dll=olepro32.dll

   [msvcrt.dll]
   FileVersion=4,20,0,6164
   hook=mfc42installer

   ...

   [mfc42installer]
   file-win32-x86=http://activex.microsoft.com/controls/vc/mfc42.cab
   run=%EXTRACT_DIR%\mfc42.exe
				
neste caso, as DLLs de MFC são fornecidas num ficheiro .exe extracção automática, que está contido no ficheiro .cab (mfc42.cab). No entanto, ferramentas para criar ficheiros de .exe de extracção automática não estão actualmente disponíveis da Microsoft. Assim, será qualquer necessidade de compactar DLLs dependentes com um ficheiro .inf ou referenciar o ficheiro .inf na rotina de instalação:
   [yourinstaller]
   file-win32-x86=http://example.microsoft.com/simpdll.cab
   InfFile=your.inf
				
ou terá de criar um automático Extrair ficheiro EXE utilizando ferramentas de terceiros.

Para ilustrar, segue-se o ficheiro .inf utilizado para instalar as DLLs de MFC dependentes. Pode modificar para instalar as suas próprias DLL da mesma forma que as DLLs de MFC estão instaladas.
   ; ========================= Mfc42.inf =========================

   ; This file will control the download of the MFC 4.2 DLLs

   [version]
   ; version signature (same for both NT and Win95) do not remove
   signature="$CHICAGO$"
   AdvancedINF=2.0

   [SourceDisksNames]
   ; This section specifies that all sources are in the "default"
   ; location.
   1="default",,1

   [DefaultInstall]
   ; Default section to process and copy all files under the section
   ; mfcdllsx.files and Register DLLs under the section mfcdllsx.register.
   CopyFiles=mfcdllsx.files
   RegisterOCXs=mfcdllsx.register

   [DestinationDirs]
   ; Destination Directories for CopyFiles Sections.
   ; 11 indicates LDID_SYS - system directory
   mfcdllsx.files=11

   [mfcdllsx.files]
   ; ,,,32 - Suppress version conflict dialog and don't overwrite newer
   ; DLLs
   msvcrt.dll,,,32
   mfc42.dll,,,32
   olepro32.dll,,,32

   [mfcdllsx.register]
   ; msvcrt.dll is not self registering
   %11%\mfc42.dll
   %11%\olepro32.dll

   ; ====================== Mfc42.inf ======================
				
A DLL tem de ser listados na secção .register se de que exporta uma função DllRegisterServer. Isto pode ser determinado examinando a DLL com Dumpbin.exe utilitário o compilador de Visual C. Também pode executar Regsvr32 na DLL, que tenta registar a DLL. Regsvr32 carrega a DLL, verifica que o DllRegisterServer correctamente é exportado chamando GetProcAddress() na função DLLRegisterServer. Se tiver êxito, a função DllRegisterServer é exportado e, em seguida, é chamado.

Tenha em atenção, no entanto, de que a alimentado Regsvr32 a DLL pode ter efeitos secundários indesejáveis. Quando DllRegisterServer é chamada, torna-se entradas de registo adequada apontando para a localização da DLL no computador. Por exemplo, escrevendo o seguinte na linha do MS-DOS, para fins de teste, pode causar problemas:
   copy mfc42.dll C:\Test
   run "D:\msdev\bin\REGSVR32.EXE C:\Test\mfc42.dll"
   delete mfc42.dll
				
a próxima vez que o sistema tenta procurar Mfc42.dll,-pesquise o registo, localiza que o ficheiro é mapeado para C:\Test\Mfc42.dll e não localizá-lo aí. Executar Regsvr32 num ficheiro que já está instalada num computador não causa problemas.

Instalação de uma DLL com uma rotina e um automático extrair EXE é útil pela seguinte razão: Se uma DLL que tem de ser actualizado já está carregada na memória, a transferência falhará. Este é um problema conhecido, que foi corrigido no Internet Explorer versão 4.0. Internet Explorer 4.0 irá sugerir um reinício e carregar a DLL nova durante o reinício.

Referências

Para obter informações adicionais, consulte os seguintes artigos na base de dados de conhecimento da Microsoft:
167158Como controlos MFC de pacote para utilização através da Internet
167597Especificar FileVersion e #Version para transferência de componentes

Para mais informações, consulte o Webcast de seguinte:
How Does Internet Component Download Work?

Propriedades

Artigo: 165075 - Última revisão: 21 de dezembro de 2006 - Revisão: 2.5
A informação contida neste artigo aplica-se a:
  • Microsoft Internet Explorer 3.0
  • Microsoft Internet Explorer 3.01
  • Microsoft Internet Explorer 3.02
  • Microsoft Internet Explorer 4.0 128-Bit Edition
  • Microsoft Internet Explorer 5.0
  • Microsoft Internet Explorer 5.5
  • Windows Internet Explorer 8
  • Windows Internet Explorer 8 on Windows Server
Palavras-chave: 
kbmt kbcode kbdownload kbfaq kbhowto KB165075 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 165075

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com