MSI는 업그레이드 설치시 필요한 어셈블리를 제거하지만 수리시 교체합니다.
-
19-09-2019 - |
문제
나는 MSI 설치 업그레이드와 관련하여 약간의 이상 함을 경험하고 있습니다. 아마도 누군가가 나를 도울 수있을 것입니다.
원본과 업그레이드의 두 MSI가 있습니다.
- MSI 버전 1.0
- GAC에 설치할 .NET 어셈블리, foo.dll이 포함되어 있습니다.
- foo.dll은 MSI 파일 시스템 GUI 내에서 "어셈블리"( "출력"이 아님)입니다.
- MSI 버전 2.0
- 또한 foo.dll (동일한 버전)과 추가 어셈블리가 포함되어 있습니다.
- MSI 2.0이 1.0을 완전히 교체하기를 원하므로 removePerviousVersion을 False로 설정했습니다.
이제 두 개의 설치 시나리오 :
MSI 1.0을 실행합니다. foo.dll은 GAC에 올바르게 설치됩니다. 그런 다음 MSI 2.0을 실행합니다 foo.dll은 GAC에서 제거 된 것 같습니다, 그러나 추가 어셈블리가 있습니다. 나는 전혀 모른다. 그러나 프로그램을 추가/제거하고 "수리"를 클릭하면 foo.dll이 들어갑니다.
MSI 1.0은 설치되지 않았으며 MSI 2.0을 실행합니다. foo.dll (및 추가 어셈블리) ~이다 예상대로.
업그레이드 중에 foo.dll이 제거되는 이유는 무엇입니까 ?? 미리 감사드립니다!
-시야
업데이트 상쾌한/재건 후 지금은 효과가있는 것 같습니다. 그러나 이제는 "영구"속성이 거짓으로 설정되어 있어도 MSI를 제거 할 때 foo.dll을 제거하지 않습니다. 큰 문제는 아니지만 무슨 일이 있었는지 아는 것이 좋을 것입니다.
해결책
기묘함을 바로 잡으려면 다음을 수행했습니다.
- Windows SDK의 일부인 orca.exe를 설치했습니다.
- ORCA, Post Build를 통해 Propery 테이블에 reinstallMode = AMUS를 추가했습니다.
이것은 즉각적인 문제를 해결하고 내가 겪고있는 설치/제거 문제를 수정했습니다. 유일한 문제는 이것이 수동 프로세스라는 것입니다. 다음 단계에서, 이것을 어떻게 든 자동 구축 후 이벤트의 일부로 만드십시오.
제휴하지 않습니다 StackOverflow