다음을 통해 공유


버전 정보 사용

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

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

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

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

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

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

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

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

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

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

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

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

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

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