2009-11-18 5 views
9

나는 윈도우 설치 및 윅스에 대해 학습하고, 그것이 어떻게 작동하는지에 관한 질문의 번호를 가지고있어 :이해 GUIDS, 업데이트 및 패치

  1. 구성 요소의 GUID 변경한다면 동일한 파일이 구성 요소에 있습니다. 주요 업그레이드에서 어떤 일이 발생합니까? 파일이 대체 되나요?
  2. 구성 요소가 제품에서 제거되면 주요 업그레이드시 관련 파일은 어떻게됩니까? 제거시 원본 파일이 제거됩니까?
  3. 파일의 어셈블리 버전이 변경되었는지 여부와 작은 업데이트 및 사소한 업그레이드의 경우에 상관없이 모든 구성 요소의 모든 파일이 주요 업그레이드로 대체된다는 점에있어서 GUID가 동일하고 파일의 어셈블리 버전이 증가 되었습니까? 파일에 aspx 페이지와 같은 어셈블리 버전이 없으면 어떻게 될까요?
  4. 제품을 설치 프로그램을 사용하지 않고 컴퓨터에 배포했다고 가정합니다. 그런 다음 설치된 디렉토리에있는 것과 동일한 이름의 파일이있는 설치 프로그램을 만든 경우 설치를 시도하면 해당 파일은 어떻게됩니까? 그들은 대체 되었습니까?
  5. 열에 같은 도구를 사용하여 디렉토리의 모든 파일 (웹 사이트 등)을 포함하는 XML 파일을 만드는 경우 GUID를 수동으로 또는 수동으로 유지해야한다고 말하면서 정확합니다. 스크립트) 또는 주요 업그레이드 만 수행 할 수 있습니까? 구성 요소 GUID 변경,하지만 같은 파일 구성 요소에있는 경우
+0

이 모든 것을 매우 쉽게 테스트 할 수 있습니다. –

답변

4

, 주요 업그레이드에 무슨 일 ?

먼저 문제는 이전 구성 요소가 제거되었는지 여부입니다. 이전 버전의 제품을 제거하도록 업그레이드를 구성하지 않으면 해당 구성 요소가 제거되지 않습니다 (파일은 덮어 쓸 수 있음). 질문 2에 대한 답변을 참조하십시오.

두 번째 질문은 새 구성 요소의 설치 여부입니다. 구성 요소는 키 패스가없는 경우에만 설치됩니다. keypath가 버전 화 된 파일이면 더 낮은 버전도 "누락"으로 간주됩니다.

마지막으로 설치를 위해 새 구성 요소가 표시되고 Windows Installer가 설치하려고 시도한 것과 동일한 이름의 파일을 발견하면 File Versioning Rules은 파일이 바뀌 었는지 여부를 확인합니다. 예를 들어 상위 버전의 파일은 다운 그레이드되지 않습니다. 구성 요소가 제품에서 제거되면

, 무슨 주요 업그레이드에 관련 파일은 어떻게됩니까? 제거시 원본 파일이 삭제됩니까? 당신이 이전 제품을 제거하려면 Windows 설치를 알려주는 Upgrade table의 오른쪽 항목과 InstallExecuteSequence에서 넣어하지 않는 한

, 기존의 구성 요소는 혼자 남아있을 것입니다. 이전 버전을 제거하는 wix에서 설치 프로그램을 만드는 방법에 대한 지침은 Alex Shevchuk의 blog post을 참조하십시오.

오전 나는 주요 업그레이드가 모든 구성 요소의 모든 파일을 대체 할 것이라고 말하는 수정 ...

아니요. 이전 구성 요소가 먼저 제거되었는지 여부, keypath에 따라 새 구성 요소가 설치되었는지 여부 및 파일 버전 지정 규칙에 따라 다릅니다.

설치 프로그램을 사용하지 않고 컴퓨터에 제품이 배포되었다고 가정합니다. 설치자를 만든 경우 이 설치된 디렉토리에 같은 이름의 파일이 있습니다. 설치를 시도하면 어떻게됩니까?

다시 말하지만, keypath 및 파일 버전 지정 규칙에 따라 구성 요소의 설치 여부에 따라 다릅니다. 난 당신이 계속 을 거라고, 나는 을 사용하면 열 같은 도구 (웹 사이트에 대한 같은) 디렉토리 에있는 모든 파일과 xml 파일 을 만들 수 있다는 말에 수정

암 GUID는 동일하거나 (수동으로 또는 스크립트 사용) 큰 업그레이드를 수행 할 수있는 사람은 입니까?

수정. GUID는 구성 요소의 ID이므로 GUID를 변경하면 같은 대상 위치에 동일한 리소스를 설치 한 두 구성 요소 (이전 및 새 버전의 제품에 있음)가 존재하게됩니다. according to MSDN : "절대 같은 이름과 대상 위치에 리소스를 설치하는 두 개의 구성 요소를 만들지 마십시오."

3

Component Rules을 알아보십시오. Windows Installer는 깨지기 쉽고 강제로 적용하지 않습니다. 그러나 규칙을 따르지 않으면 이상한 이상한 부두가 발생합니다.

쉬운 해결책, 구성 요소 당 파일 하나를 사용하고 컴파일 시간 GUID 생성시 heat을 사용하십시오 (Guid="*"의 출력은 안정된 알고리즘을 사용하며 무작위가 아닙니다). 열 생성 GUID가 무작위이지만 컴파일시에 candle에 의해 생성 된 GUID는 안정적입니다 (파일 이름 + 경로 해시 또는 메모리의 내용을 기반으로합니다)

설치 중에 Windows Installer가 이미 디스크에있는 파일을 찾으면 해당 파일에 대한 참조 횟수를 "공유"파일이라고 가정합니다. 참조 카운트가 0으로 되돌아 가면 파일이 디스크에서만 제거되므로 파일이 이미 존재하면 카운트가 0으로 돌아 오지 않을 수 있으며 제거한 후에도 파일이 계속 누락 될 수 있습니다.

+0

참조 계산 수 : 간단하지 않습니다. 동일한 파일 (구성 요소 규칙 위반)을 설치하는 두 개의 다른 구성 요소가있는 경우 한 구성 요소를 제거하면 파일이 제거됩니다. 이 파일에는 refcount가 이미 있거나 SharedDllRefCount = "Yes"로 구성 요소에 명시 적으로 설정되어있는 경우 Windows Installer에 의해서만 업데이트되는 레거시 메커니즘 인 "sharedllrefcount"가있는 경우 몇 가지 추가 보호 기능 만 있습니다. –

+0

사실, 구성 요소 규칙을 위반하면 모든 배팅이 해제됩니다. – saschabeaumont