2017-12-31 111 views
2

Installshield 프로젝트가 있습니다.Installshield 주요 업그레이드로 이전 버전을 제거하지 않습니다.

주요 업그레이드 항목을 추가하고 Product version, Product codePackage code으로 변경했습니다. 이 문제가 - 새로운 설치 프로그램 설치 후

는 이전 버전 나는 그것이 내 이전 버전 번호가 1.0.4.23와 새가 1.0.4.24이다가 있다는 사실에 관한 생각

(add/remove에서) 여전히 존재 ? 주요 업그레이드가 버전의 작은 변화를 무시합니까? 주요 업그레이드 common 탭에서

나는 이것이 내가 현재의 문제가 버전 번호와 관련된 것으로 의심되는 주된 이유이며, 내가 1.11.2 모든 것이 큰 일 버전 번호와 함께이 년 전 일을 remeber Any earlier version

를 선택했다. ..

도와 줄 수 있습니까?

감사

답변

4

나는 그것이 내 이전 버전 번호가 1.0.4.23 있다는 사실에 관한 생각과 새로운 하나 1.0.4.24입니다 -이 문제인가? 주요 업그레이드가 버전의 작은 변화를 무시합니까?

예, 버전 번호의 처음 세 필드 만 주요 업그레이드에 중요합니다. 네 번째 필드는 무시됩니다.

이것은 Major Upgrades MSDN page의 메모에 명시되어 있습니다.

주요 업그레이드를 실행하려면 새 버전 번호가 1.0.5.0 이상이어야합니다.


편집 : 크리스토퍼 화가

는 지적한다 : 모든 네 개의 필드를 사용해야하는 경우

이 주위에 방법이있다. FindRelatedProducts를 사용자 지정하여 사용자 지정 작업을 만들고 ProductCode 으로 작업 속성을 설정하면 RemoveExistingProducts가 작동합니다.

사용자 지정 작업

는 다음과 같이 구현 될 수있다 :

  1. 전화 MsiGetProperty을 제품의 UpgradeCode를 얻을 수 있습니다.
  2. MsiEnumRelatedProducts()을 호출하여 UpgradeCode을 제품과 동일한 제품으로 모두 나열하십시오.
  3. MsiEnumRelatedProducts()가 반환 한 제품이 실제로 설치되었는지 확인하려면 MsiQueryProductState()으로 전화하십시오.더 이상 설치되지 않은 고아 제품이 MsiEnumRelatedProducts()에서 반환 된 사례가있었습니다. 따라서 코드는 설치 상태를 MsiQueryProductState()으로 두 번 확인하면 더욱 강력 해집니다.
  4. 설치된 제품의 버전을 쿼리하기 위해 szProperty 매개 변수의 인수로 INSTALLPROPERTY_VERSIONSTRING을 사용하여 MsiGetProductInfo()을 호출하십시오. INSTALLPROPERTY_VERSIONINSTALLPROPERTY_VERSION을 대신 사용하지 마십시오. INSTALLPROPERTY_VERSION은 버전 번호의 처음 세 필드에서만 파생되므로이 문제는 피하기를 원합니다.
  5. 버전 번호를 비교할 때 문자열을 비교하는 것이 아니라 parse the strings into the fields that are separated by '.' and compare the fields individually인지 확인하십시오. 당신은 당신이 대체 할 일치하는 제품을 발견하는 경우
  6. ActionPropertyRemoveExistingProducts 다음에 작용하는 것이이 제품의 제품 코드로 설정하는 MsiSetProperty()를 호출합니다.
+0

답변에 참조를 포함 해 주셔서 감사합니다. – Noam

+1

네 개의 필드를 모두 사용해야하는 경우이를 해결할 수있는 방법이 있습니다. FindRelatedProducts 구현을 직접 수행하는 사용자 지정 작업을 만들고 RemoveExistingProducts가 작동하는 ProductCode로 작업 속성을 설정합니다. –

+1

@ChristopherPainter 이러한 사용자 지정 작업을 구현할 수있는 단계를 추가했습니다. – zett42

관련 문제