다음을 통해 공유


버전 정보 사용

설치 프로그램에는 일반적으로 다음과 같은 목표가 있습니다.

  • 올바른 위치에 파일을 배치합니다.
  • 설치 프로그램이 기존 파일을 크게 다른 버전으로 바꾸는 경우 사용자에게 알리려면(예: 독일어 파일을 영어 파일로 대체하거나, 최신 파일을 이전 파일로 바꾸기)

설치 프로그램을 작성할 때 각 파일에 대해 다음 정보가 있어야 합니다.

  • 파일의 이름 및 위치(원본 파일이라고 함)입니다.
  • 사용자의 하드 디스크에 있는 해당 파일의 이름입니다(대상 파일이라고 함). 이 이름은 일반적으로 설치 디스크의 파일 이름과 동일합니다.
  • 파일의 공유 상태입니다. 즉, 파일이 설치되는 애플리케이션에 대한 프라이빗 파일인지 아니면 여러 애플리케이션에서 공유할 수 있는지 여부입니다.

설치 프로그램은 VerFindFile 함수를 사용하여 디스크에서 파일을 복사할 위치를 결정할 수 있습니다. 이 함수를 사용하여 파일이 애플리케이션에 대한 프라이빗인지 또는 공유할 수 있는지 여부를 지정할 수도 있습니다. 파일을 찾는 데 문제가 발생하면 VerFindFile 오류 값을 반환합니다. 예를 들어 시스템에서 대상 파일을 사용하는 경우 VerFindFileVFF_FILEINUSE반환합니다. 설치 프로그램은 사용자에게 문제를 알리고 설치를 계속하거나 종료하기로 한 사용자의 결정에 응답해야 합니다.

VerInstallFile 함수는 VerFindFile지정된 디렉터리의 임시 파일에 원본 파일을 복사합니다. 필요한 경우 VerInstallFile 데이터 압축 해제 라이브러리의 함수를 사용하여 파일을 확장합니다.

VerInstallFile 임시 파일의 버전 정보를 대상 파일의 버전 정보와 비교합니다. 두 값이 다른 경우 VerInstallFile 하나 이상의 오류 값을 반환합니다. 예를 들어 임시 파일이 대상 파일보다 오래된 경우 VIF_SRCOLD 반환하고 파일에 언어 식별자 또는 코드 페이지 값이 다른지 VIF_DIFFLANG. 설치 프로그램은 사용자에게 문제를 알리고 설치를 계속하거나 종료하기로 한 사용자의 결정에 응답해야 합니다.

일부 VerInstallFile 오류를 복구할 수 있습니다. 즉, 설치 프로그램은 버전 충돌과 관계없이 파일을 설치하기 위해 VIFF_FORCEINSTALL 옵션을 지정하여 VerInstallFile 다시 호출할 수 있습니다. VerInstallFileVIF_TEMPFILE 반환하고 사용자가 설치를 강제하지 않도록 선택하면 설치 프로그램에서 임시 파일을 삭제해야 합니다.

VerInstallFile 이전에 오류가 없었음에도 불구하고 강제 설치를 시도할 때 복구할 수 없는 오류가 발생할 수 있습니다. 예를 들어 설치 프로그램이 강제 설치를 시도하기 전에 다른 사용자가 파일을 잠글 수 있습니다. 복구할 수 없는 오류가 발생한 후 설치 프로그램이 강제 설치를 시도하는 경우 verInstallFile 실패합니다. 이러한 유형의 오류에서 복구하려면 설치 프로그램에 루틴이 포함되어야 합니다.

권장되는 해결 방법은 설치, 건너뛰기, 및 모두 설치단추가 있는 대화 상자를 표시하는 것입니다. (다른 해결 방법은 , 모두 예, 건너뛰기, 그리고 취소버튼이 있는 대화 상자입니다.) 모두 설치 버튼은 VerInstallFile의 모든 후속 사용에 VIFF_FORCEINSTALL 옵션을 포함하여 설치 프로그램이 사용자에게 유사한 오류를 묻지 않도록 해야 합니다. 복구할 수 없는 오류의 경우 설치모든 설치 단추를 사용하지 않도록 설정해야 합니다.

사용자에게 유용한 오류 메시지를 표시하려면 설치 프로그램에서 일반적으로 충돌하는 파일의 버전 리소스에서 정보를 검색해야 합니다. 설치 프로그램에서 이 용도로 사용할 수 있는 네 가지 함수는 다음과 같습니다.

GetFileVersionInfoSize 버전 정보의 크기를 반환합니다. GetFileVersionInfoGetFileVersionInfoSize 검색한 정보를 사용하여 버전 정보가 포함된 구조를 검색합니다. VerQueryValue 해당 구조체에서 특정 멤버를 검색합니다.

예를 들어, VerInstallFileVIF_DIFFTYPE 오류를 반환하는 경우, 설치 프로그램은 임시 및 대상 파일에 대해 GetFileVersionInfoSize, GetFileVersionInfo, VerQueryValue 함수를 사용하여 각 파일의 일반적인 형식을 확인해야 합니다. 파일의 언어가 충돌하는 경우 설치 프로그램에서 VerLanguageName 사용하여 이진 언어 식별자를 언어의 텍스트 표현으로 번역해야 합니다. 예를 들어 0x040C 문자열 "프랑스어"로 변환됩니다.

VerInstallFileVIF_ACCESSVIOLATION같은 파일 오류를 반환하는 경우 설치 프로그램에서 GetLastError 함수를 사용하여 가장 최근의 오류 값을 검색해야 합니다. 프로그램은 이 값을 사용자에게 표시할 정보 메시지로 변환해야 합니다. 프로그램에서 VerInstallFile 호출과 GetLastError 간에 제어를 생성해서는 안됩니다.