이것은 크게 분명히 언급하지 않은 몇 가지 사항에 크게 달려 있습니다. 잠깐 살펴 보겠습니다. 나는 버전 1에서 모든 파일이 설치 프로그램간에 고유하거나 제대로 공유되어 있으며 마이그레이션에 대해 말하는 코드와 관련이 없다고 가정하므로 (이 질문에서 무시할 수 있음).
사례 1 : 코드 X는 DLL간에 마이그레이션합니다. A는 a.dll을 설치합니다. B는 b.dll을 설치하고 코드는 b.dll에서 a.dll으로 이동합니다.
이 경우 두 제품에 걸친 콜 체인이 없다고 가정하면 특별한 것은 없습니다. 단순히 A.2를 a.dll을 다음 버전으로 바꾸고 B.2는 b.dll을 다음 버전으로 바꿉니다. 설치 순서 나 DLL의 다중 소유권에 대해 걱정할 필요가 없습니다.
이 방법은 DLL 버전 관리를 통해 DLL을 올바르게 교체 할 수있는 한 모든 종류의 업그레이드에서 작동해야합니다.
게시 된 인터페이스 (예 : COM 클래스)가있는 경우 a.dll이 가져 오기 전에 b.dll에서 등록 참조를 포기해야하는 업데이트 순서가 필요할 수 있지만 이러한 변경은 구성 요소를 위반합니다 규칙.
사례 2 : 코드 X의 dll은 설치 프로그램 사이를 이동합니다. B는 c.dll을 설치하고 그 dll은 이제 A로 설치됩니다
이 경우 성공 여부는 초기 제작의 품질에 따라 달라집니다. c.dll이 자체 구성 요소에 의해 설치되고 공유로 표시된 경우 해당 구성 요소를 A (설정과 일치)에 추가 할 수 있으며 업그레이드가 어느 순서로든 원활하게 작동합니다. A.2를 먼저 설치하면 참조 횟수가 늘어나므로 B.2를 참조하면 참조가 해제되지만 제거되지는 않습니다. B.2를 먼저 설치하면 c.dll이 일시적으로 제거되지만 A.2를 설치하면 복원됩니다. 제거는 참조 횟수를 추적하고 필요에 따라 제거하여 유사하게 작동합니다.
그러나 이것은 주요 업그레이드를 전제로합니다. 마이너 업그레이드 (.msp 또는 .msi로 제공됨)를 사용하는 경우 훨씬 어려운 시나리오입니다. B의 업그레이드 경로를 깨끗하게 유지하려면 c.dll 구성 요소를 유지하고 c.dll을 제거하기위한 대체 방법을 선택해야합니다. 그러나 내가 아는 모든 접근 방식은 A와 충돌하여 동일한 구성 요소의 정확한 복사본을 같은 위치에 설치합니다. 이 경우 B.2를 먼저 설치해야하지만 두 번째로 설치하면 c.dll이 제거 될 수 있습니다.
마이너 업그레이드가 제대로 작동 할 수 있다면, 당신은 또한 패치 제거의 경우를 생각해야 할 수도 있습니다,하지만 그들은 수 없기 때문에, 나는 여기에 포함되지 않습니다.
큰 질문은 InstallShield 설치가 MSI 기반 설치인지 여부입니다. 그 대답에 큰 차이가 있습니다. – PhilDW