GetVers.exe로 구성 요소의 FileVersion과 #Version 확인

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

요약

웹을 통한 구성 요소의 업데이트는 대개 구성 요소의 파일 버전을 이용하여 제어합니다. 이 파일 버전은 <OBJECT> 태그의 CODEBASE 특성에서 #Version을 사용하여 지정하거나 .inf 파일에서 FileVersion 키워드를 사용하여 지정합니다. 파일 버전을 결정하는 데 혼동이 생길 수 있으며 버전을 올바르게 지정하지 않으면 구성 요소가 잘못 다운로드될 수 있습니다. Microsoft Developer Studio 또는 파일 리소스를 열 수 있는 기타 환경을 액세스할 수 없는 경우에는 GetVers.exe 파일을 사용하여 필요한 버전을 알아낼 수 있습니다.

추가 정보

<OBJECT> 태그에서는 아래와 같이 CODEBASE 특성을 사용하여 파일 버전을 지정합니다.
   <OBJECT ID="BoomButton" WIDTH=225 HEIGHT=35
   CLASSID="CLSID:56F1BF40-B2D0-11d0-A6D6-00AA00A70FC2"
   CODEBASE="http://example.microsoft.com/AControl.cab#Version=1,0,0,1">
   ...
아래는 <OBJECT> 태그를 사용할 때 구성 요소 다운로드를 제어하는 방법을 의사 코드로 나타낸 것입니다.
   Check the Registry for CLSID
   If CLSID of OBJECT is NOT found in the registry
      Download OBJECT
   Else If no #Version specified in CODEBASE tag
      Use OBJECT installed on system
   Else
      Check InprocServer32 key for location of installed component
      If File version of installed component < CODEBASE #Version Tag
         Download OBJECT
위의 작업 흐름과 다른 두 가지 예외가 있습니다. CLSID 아래에서 [AppID] 키가 발견되면 구성 요소는 대개 DCOM을 통해 실행하도록 등록되고 업데이트되지 않습니다. 또한, [Installed Version] 키는 파일 버전보다 우선합니다. 이 키는 Java 클래스와 비 PE(Portable Executable) 파일에 사용됩니다.

.inf 파일을 통해 설치된 구성 요소의 업데이트는 .inf 파일에서 FileVersion 키워드로 제어합니다. 예를 들어, 아래 구문은 위의 VC 4.2b 컨트롤을 위한 mfc42.dll의 설치를 제어합니다.
   [mfc42.dll]
   FileVersion=4,2,0,6256
   hook=mfc42installer
이 .inf 파일이 Mfc42.dll 다운로드를 제어하는 방법을 의사 코드로 나타내면 아래와 같습니다.
   Search for mfc42.dll in the system (first looking at the same directory
   as the previous version of the control being installed; if not found,
   the file is searched for via the standard search path for DLLs)
   If mfc42.dll is not found,
      install mfc42.dll
   Else
    Compare the file version of the DLL with the FileVersion keyword
    specified in the .inf file
<OBJECT> 태그와 .inf 파일 모두에서 파일 버전을 지정하는 데 혼동이 생길 수 있습니다. Windows 탐색기에서 파일을 마우스 오른쪽 단추로 누르고 등록 정보를 선택한 다음 버전 탭을 누를 때 Windows 셸이 표시하는 파일 버전은 <OBJECT> 태그나 .inf 파일에 필요한 버전 번호와 항상 같지는 않습니다. 아래 예에서는 몇몇 VC 5.0 DLL에 대해 Windows 셸이 보고하는 파일 버전 및 사용할 올바른 버전 간의 차이를 보여줍니다.
   Mfc42.dll:     보고 - 4.21.7022  사용 - 4,21,0,7022
   Msvcrt.dll:    보고 - 5.00.7022  사용 - 5,0,0,7022
   Olepro32.dll:  보고 - 5.0.4055   사용 - 5,0,4055,1
Microsoft Developer Studio에 액세스할 수 있으면 아래와 같은 방법으로 파일의 리소스를 열고 올바른 버전을 알아낼 수 있습니다.
  1. Developer Studio의 File 메뉴에서 Open을 선택하고 Open as, Resources를 차례로 누릅니다.
  2. 버전 리소스를 열고 FILEVERSION 키를 찾습니다. 이 곳에 나타나는 버전은 <OBJECT> 태그나 .inf 파일에서 사용할 올바른 버전입니다.
  3. 버전 리소스의 Block Header 부분에 또 다른 "FileVersion" 키가 있는 것을 알 수 있습니다. 이 버전은 Windows 셸이 표시하는 버전 번호로, 때로는 위 2단계에서 본 FILEVERSION 키에 나타난 버전 번호와 다를 수 있습니다.
Microsoft Developer Studio 또는 파일 리소스를 열 수 있는 또는 기타 환경을 액세스할 수 없는 경우에는 GetVers.exe를 사용하여 필요한 버전을 알아낼 수 있습니다. 이 프로그램을 사용하려면 프로그램을 다운로드한 다음 아래 명령을 입력합니다.
GetVers <파일 이름>
Microsoft Download Center에서 아래의 파일을 다운로드할 수 있습니다. 파일을 다운로드하려면 아래의 파일 이름을 누르십시오.
Getvers.exe
Microsoft Download Center에서 파일을 다운로드하는 방법에 대한 자세한 내용을 보려면 아래의 Microsoft Download Center를 방문하십시오.
http://www.microsoft.com/downloads/search.asp
그런 다음, How to use the Microsoft Download Center를 누르십시오. 아래는 GetVer 프로그램의 소스 코드입니다.
   void reportError()
   {
       LPVOID lpMsgBuf;

       FormatMessage(
           FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
           NULL,
           GetLastError(),
           MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
           (LPTSTR) &lpMsgBuf,
           0,
           NULL );

       cout << (char*)lpMsgBuf << "\n";

       // Free the buffer.
       LocalFree( lpMsgBuf );
   }

   void main( int argc, char *argv[ ], char *envp[ ] )
   {
       cout << "\n";

       if(2 != argc)
       {
           cout << "Syntax: GetVer <File Name>\n";
           return;
       }

       DWORD dwArg;
       DWORD dwInfoSize = GetFileVersionInfoSize(argv[1], &dwArg;);

       if(0 == dwInfoSize)
       {
           cout << "No version info available\n";
           reportError();
           return;
       }

       BYTE* lpBuff = new BYTE[dwInfoSize];

       if(!lpBuff)
       {
           cout << "Out of Memory\n";
           return;
       }

       if(0 == GetFileVersionInfo(argv[1], 0, dwInfoSize, lpBuff))
       {
           cout << "Error retrieving version info\n";
           reportError();
           return;
       }

       VS_FIXEDFILEINFO *vInfo;

       UINT uInfoSize;

       if(0 == VerQueryValue(lpBuff, TEXT("\\"),
               (LPVOID*)&vInfo,
               &uInfoSize))
       {
           cout << "Version information not available\n";
           delete lpBuff;
           return;
       }

       if(0 == uInfoSize)
       {
           cout << "Version information not available\n";
           delete lpBuff;
           return;
       }

       cout << argv[1]
           << " Version: "
           << HIWORD(vInfo->dwFileVersionMS) << ","
           << LOWORD(vInfo->dwFileVersionMS) << ","
           << HIWORD(vInfo->dwFileVersionLS) << ","
           << LOWORD(vInfo->dwFileVersionLS) << "\n";

       delete lpBuff;
   }

속성

기술 자료: 167597 - 마지막 검토: 2004년 8월 12일 목요일 - 수정: 1.3
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft Internet Explorer 3.0
  • Microsoft Internet Explorer 3.01
  • Microsoft Internet Explorer 3.02
  • Microsoft Internet Explorer 4.0 128-Bit Edition
키워드:?
kbdownload axsdkcompdownload inetsdkcab kbactivex kbfile kbie300 kbie301 kbie302 kbie400 kbiefaq KB167597
더 이상 지원되지 않는 제품의 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