x86, amd64 및 Itanium로 컴파일 된 Windows 서비스 exe가 있습니다. 이 서비스를 설치하는 데 사용되는 단일 x86 WiX/MSI 설치 프로그램을 작성하려고합니다. 설치 프로그램에는 아키텍처 특정 조건을 가진 세 가지 구성 요소가 있습니다 (예 : <Condition>NOT VersionNT64</Condition>
이 x86 감지에 사용됨). 따라서 특정 아키텍처에만 구성 요소 중 하나만 설치됩니다. 이러한 구성 요소는 exe의 x86, x64 또는 Itanium 빌드를 설치합니다.다중 플랫폼 WiX 설치 프로그램에 아키텍처 종속 서비스 설치
이 모든 것이 올바르게 작동하고 올바른 이진 파일이 세 플랫폼 각각에 설치됩니다.
다음 단계는 설치에 ServiceInstall
태그를 사용하여 내 EXE에 대한 Windows 서비스이며, 우리가 문제로 실행하는 곳이다 : 분명히 ServiceInstall
태그의 Name
속성이 윅스 파일 내에서 고유해야합니다. 예 : 서비스에 전화하고 싶습니다. 세 플랫폼 모두에서 FooBar
이지만 허용되지 않습니다. WiX 파일은 이름 충돌로 인해 컴파일되지 않습니다.
해결 방법으로 아키텍처 의존적 인 서비스 이름을 가질 수 있습니다 (예 : FooBar_ia64
하지만 이것은 나쁘다. 코드베이스에는 서비스 이름에 대한 가정을하는 여러 장소가있다. 따라서 서비스 이름을 변경하면 코드 기반에서이 모든 장소를 찾아 수정해야 할 것이다.
Component
에
ServiceInstall
를 이동하려고했으나
ServiceInstall
태그는 분명히 암시 적 중 하나가 작동하지 않았다 그래서 같은
Component
에 정의 된
File
태그를 참조합니다.
아키텍처 당 하나의 설치 프로그램을 생성 할 수 있으므로 설치 프로그램에서 조건이 적용되지 않으며 문제가 해결되지 않을 수도 있다는 것을 알고 있습니다. 그러나 3 가지 아키텍처 모두에 대해 하나의 설치 프로그램을 사용하는 것과 거의 흡사 할 때 3 인스톨러를 사용한다는 생각은 정말 싫습니다 :-)
이 문제를 해결하는 다른 방법은 없을까요?
당신이 아직 이것을 파악하지 못했을 경우를 대비하여, 제가 상속 한 레거시 코드베이스이며, 기존 레거시 설치 프로그램을 대체 할 새로운 설치 프로그램을 빌드하려고합니다.