HOWTO: Internet Explorer에서 .inf 파일을 사용하여 종속 DLL을 다운로드하는 방법

기술 자료 번역 기술 자료 번역
기술 자료: 165075 - 이 문서가 적용되는 제품 보기.
이 문서는 이전에 다음 ID로 출판되었음: KR165075
모두 확대 | 모두 축소

요약

ActiveX 컨트롤과 함께 종속 DLL을 다운로드해야 하는 경우가 있습니다. 이는 MFC 및 Visual Basic 컨트롤에서 필요합니다. 본 문서에서는 이 작업을 수행하는 세 가지 방법을 설명합니다.

추가 정보

컨트롤을 다운로드할 때 종속 DLL을 포함하는 방법은 세 가지입니다. 첫 번째 방법은 OCX 및 INF 파일과 함께 DLL을 CAB 파일에 넣는 것입니다. 이 방법의 단점은 컨트롤을 다운로드하면 항상 DLL도 함께 다운로드된다는 것입니다. 때로는 이 방법이 적합합니다. 두 번째 방법은 종속 DLL을 별도의 CAB 파일에 넣고 컨트롤의 INF 파일에서 그 CAB 파일을 참조하는 것입니다. 세 번째 방법에서는 종속 DLL을 별도의 CAB 파일에 넣는 것은 같지만 컨트롤[ASCII 146] INF 파일에서 후크(Hook)를 사용하여 그 CAB 파일을 참조합니다. 후크(Hook)를 사용하면 다운로드 프로세스가 종속 CAB 파일에 포함된 INF 또는 EXE 파일을 실행할 수 있습니다.

OCX를 위한 종속 파일(이 예제에서는 Simpdll.dll)을 추가하려면 컨트롤을 위한 섹션과 유사한 섹션을 INF 파일의 [AddCode] 섹션에 추가합니다.
   [Add.Code]
   TestDw.ocx=TestDw.ocx
   simpdll.dll=simpdll.dll
그런 다음 DLL의 설치를 제어하기 위한 섹션을 INF 파일에 추가합니다.
   [simpdll.dll]
   FileVersion=1,0,0,1
   file-win32-x86=thiscab
이는 앞에서 설명한 다운로드에 DLL 종속 파일을 포함하는 첫 번째 방법입니다.

DLL을 별도의 CAB 파일에 넣으려면 위치를 "thiscab"에서 종속 CAB의 URL로 바꾸면 됩니다.
file-win32-x86= http://example.microsoft.com/simpdll.cab
이 경우 Simpdll.cab 파일에는 simpdll.dll만이 포함됩니다.

필요하면 위의 INF 파일과 CAB 파일에 DLL을 여러 개 추가할 수 있습니다.

종속 DLL을 패키지로 만드는 세 번째 방법에서는 후크(Hook)를 사용하여 종속 DLL[ASCII 146] CAB 파일을 참조합니다. 이 방법을 사용하면 다운로드할 때 종속 CAB 파일에서 INF 또는 EXE 파일을 실행할 수 있습니다.

.inf 파일에서 아래의 섹션은 MFC 컨트롤을 위한 종속 DLL 다운로드를 제어합니다.
   [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
이 경우 MFC DLL은 자동 압축 풀기 .exe 파일 형식으로 .cab 파일(mfc42.cab)에 포함됩니다. 그러나, 현재 Microsoft는 자동 압축 풀기 .exe 파일을 만드는 도구를 제공하지 않습니다. 따라서, .inf 파일을 사용하여 종속 DLL을 패키지로 만들거나 설치 후크(Hook)에서 .inf 파일을 참조해야 합니다.
   [yourinstaller]
   file-win32-x86=http://example.microsoft.com/simpdll.cab
   InfFile=your.inf
또는, 다른 공급업체의 도구를 사용하여 자동 압축 풀기 EXE 파일을 만들어야 합니다.

아래는 종속 MFC DLL을 설치하는 데 사용되는 .inf 파일 예제입니다. MFC DLL을 설치하는 것과 동일한 방법으로 다른 DLL을 설치하도록 이 inf 파일의 내용을 수정할 수 있습니다.
   ; ========================= 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 ======================
DLL이 DllRegisterServer 함수를 내보내는 경우에는 .register 섹션에 그 DLL을 나열해야 합니다. Visual C 컴파일러의 Dumpbin.exe 유틸리티를 사용하여 DLL을 조사하면 이 함수를 내보내는지의 여부를 알 수 있습니다. 또한 DLL에 대해 Regsvr32를 실행하여 DLL을 등록할 수도 있습니다. Regsvr32는 DLL을 로드하고 DLLRegisterServer 함수에 대해 GetProcAddress() 메서드를 호출함으로써 DllRegisterServer 함수가 적절하게 내보내지는지 확인합니다. 검사에 성공하면 DllRegisterServer 함수를 내보낸 다음 호출합니다.

그러나, DLL에 대해 Regsvr32를 실행하면 의도하지 않은 부작용이 발생할 수 있습니다. DllRegisterServer를 호출하면 이 함수는 컴퓨터에서 DLL의 위치를 가리키는 적절한 레지스트리 항목을 작성합니다. 예를 들어, 테스트를 위해 MS-DOS 프롬프트에 아래 명령을 입력하면 문제가 발생하는 것을 알 수 있습니다.
   copy mfc42.dll C:\Test
   run "D:\msdev\bin\REGSVR32.EXE C:\Test\mfc42.dll"
   delete mfc42.dll
다음 번에 시스템이 Mfc42.dll을 찾을 때 시스템은 레지스트리를 조사하여 파일이 C:\Test\Mfc42.dll에 매핑되는 것으로 인식하지만 실제로는 그 위치에서 파일을 찾을 수 없습니다. 이미 컴퓨터에 설치된 파일을 대상으로 Regsvr32를 실행하면 문제가 발생하지 않습니다.

업그레이드해야 할 DLL 파일이 메모리에 이미 로드되어 있으면 다운로드에 실패하므로, 이 경우 후크(Hook)와 자동 압출 풀기 EXE 파일을 사용하여 DLL을 설치하는 방법이 유용합니다. 이는 알려진 문제이며 Internet Explorer 버전 4.0에서 수정되었습니다. Internet Explorer 4.0은 컴퓨터를 다시 시작하라는 메시지를 표시하고 컴퓨터를 다시 시작할 때 새 DLL을 로드합니다.

참조

자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
Q167158 인터넷에서 사용하기 위해 MFC 컨트롤을 패키지로 만드는 방법
Q167597 GetVers.exe로 구성 요소의 FileVersion과 #Version 확인

자세한 내용은 아래의 Webcast 항목을 참조하십시오.
How Does Internet Component Download Work?

속성

기술 자료: 165075 - 마지막 검토: 2011년 9월 28일 수요일 - 수정: 4.0
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Windows Internet Explorer 8
  • Windows Internet Explorer 8 on Windows Server
키워드:?
axsdkcompdownload inetsdkcab kbcodedownload kbgrpinet kbie300 kbie301 kbie302 kbie400 kbie500 kbie550 kbiefaq kbhowto KB165075
더 이상 지원되지 않는 제품의 KB 내용에 대한 고지 사항
이 문서에서는 Microsoft에서 더 이상 지원하지 않는 제품에 대해 설명합니다. 따라서 이 문서는 "있는 그대로" 제공되며 업데이트되지 않습니다.

피드백 보내기

 

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