2014-09-19 3 views
2

최근에 우리는 윅 스크립트에 중복 구성 요소 GUID가 있다는 것을 발견했습니다. 공통 GUID는 이름이 같지만 같은 디렉터리에있는 두 개의 파일에 사용됩니다. 나는 그물에 대한 검색을했는데, 나중에 문제가 발생할 수 있지만 같은 문제에 대한 만족스러운 해결책을 찾지 못했습니다.Wix에서 중복 구성 요소 GUID를 안전하게 해결하기

이 문제를 안전하게 해결하는 방법이 있습니까? 감사.

답변

1

파일의 이름을 변경하고 각각의 새 GUID 을 모두 줄 수 있습니까? 가장 안전한 방법입니다. 모든 참조 횟수 문제를 해결합니다. 파일의 이름을 변경하여 각 파일에 대한 새로운 절대 경로 (경로 + 파일 이름)를 만들고 Windows Installer는 기본적으로 단일 GUID를 할당하여 절대 경로를 계산합니다.

개념에 대한 자세한 설명. 권장 나는 그것을 명확하게 될 것이라고 생각, 읽어 Change my component GUID in wix?

참고 : delay load을 많이 사용하여 C/C++를 작성하는 경우 DLL 파일의 이름을 변경주의하십시오.

+0

@Glytzkof 빠른 응답에 감사드립니다. 우리는이 접근법을 시도 할 것입니다! – whywhywhy

+0

[** 당신은 Wix xml 파일 **에서 많은 원본 속성을 제외 할 수 있습니다] (http://stackoverflow.com/a/24769965/129130) 하드 코딩 값 대신 Wix 기본값에 의존합니다. –

+0

호기심에서 벗어나 이름을 바꿀 수없는 .net 파일 인 경우 어떻게해야할까요? – whywhywhy

1

이 문제는 문제를 "해결하는"다른 접근법이므로 다른 답변으로 추가 할 것입니다.

당신은 두 개의 새로운 GUID를 파일에 할당하여 "이 문제를 해결"전적으로 서로 두 제품 버전을 "분리"를 일찍 InstallExecuteSequence에서에서 RemoveExistingProducts주요 업그레이드를 사용할 수 있습니다. 이 업그레이드 양식은 Windows Installer의 구성 요소 규칙을 무시하고 이전 버전이없는 것처럼 업그레이드를 설치합니다. 많은 기업이 이러한 유형의 업그레이드 시나리오를 표준화하지만 구성 요소 참조로 인해 발생하는 대부분의 문제를 제거하므로 비효율적이며 느립니다.

중요한 어림셈 : 구성 요소를 올바르게 참조하지 않을 때 부 업그레이드 또는 패치를 사용할 수 없습니다. 나는 대부분의 Wix 사용자가 이것을 알고 있다고 생각한다.

(두 파일이 GUID를 공유 할 때 기술적으로 파일 중 하나에 새 GUID를 줄 수는 있지만 레거시 문제가 다시 발생하지 않도록하기 위해이 작업을 수행하지 않습니다. 특히 구형 레거시 공유 참조 횟수가 간섭을 일으킬 수 있습니다

enter image description here

은 Windows 설치 이전부터 계산 기준이며, 그것은 너무 '소통'하기 위해 Windows Installer에서 사용됩니다 :. Wix componentmsidbComponentAttributesSharedDllRefCount 비트 세트가있는 경우 HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\SharedDLLs이 플래그는) 작성 레거시 스타일 설치 프로그램을 사용하면 W로 참조 카운트 된 파일 만 삭제할 수 있습니다. indows 설치 프로그램.

공유 위치에 설치하지 않는 파일에 대해서는이 플래그를 설정하지 않으며 좋은 접근 방법이라고 생각합니다. Installshield는 모든 구성 요소에 대해이 공유 dll 등록 정보를 설정하는 데 사용되며 이로 인해 제거시 많은 이상한 표 유실 파일이 남게됩니다. 다시 말해 플래그가 일반적으로 솔루션보다 문제가 있기 때문에 진정한 공유 위치에 설치하는 경우에만이 플래그를 활성화하십시오.

자신의 응용 프로그램간에 파일을 공유하고 타사 응용 프로그램에서 사용할 수있는 파일이 필요하지 않은 경우 ProgramFiles에 설치하고 Wix 포함 파일을 통해 공유하십시오.

+0

답변 해 주셔서 감사합니다. – whywhywhy