2011-08-11 11 views
7

시작 조건은 무엇입니까? x86 설치 프로그램이 64 비트 시스템에서 실행되는 것을 막기로되어 있지만 효과가없는 것으로 보입니다.64 비트 시스템에서 64 비트 설치 프로그램을 사용하기위한 시작 조건

<!-- Launch Condition to check that x64 installer is used on x64 systems --> 
<Condition Message="64-bit operating system was detected, please use the 64-bit installer."> 
    <![CDATA[VersionNT64 AND ($(var.Win64) = "no")]]> 
</Condition> 

var.Win64이 같은 MSBuild를 변수에서 파생 :

<!-- Define platform-specific names and locations --> 
    <?if $(var.Platform) = x64 ?> 
    <?define ProductName = "$(var.InstallName) (x64)" ?> 
    <?define Win64 = "yes" ?> 
    <?define PlatformProgramFilesFolder = "ProgramFiles64Folder" ?> 
    <?define PlatformCommonFilesFolder = "CommonFiles64Folder" ?> 
    <?else ?> 
    <?define ProductName = "$(var.InstallName) (x86)" ?> 
    <?define Win64 = "no" ?> 
    <?define PlatformProgramFilesFolder = "ProgramFilesFolder" ?> 
    <?define PlatformCommonFilesFolder = "CommonFilesFolder" ?> 
    <?endif ?> 

내 문제를 해결하고 싶지만, 나는 또한이 유형의 문제를 해결하기위한 전략에 대해 듣고 관심을 가질 것입니다. LaunchCondition table 정의에 따르면

답변

7

: 설치를 시작하기 True로 평가해야

표현.

조건은 두 부분으로 구성됩니다. 첫 번째 것은 설치시 평가되고 다른 하나는 작성시 평가됩니다. 따라서 x86 패키지의 경우 조건의 두 번째 부분은 빌드시 "no"= "no"로 평가되며 설치시 True를 제공합니다. 그리고 첫 번째 부분 인 VersionNT64는 x64 컴퓨터에서 정의됩니다 (따라서 True). 이것이 전체 조건이 참이고 설치가 시작되는 이유입니다.

<Condition Message="64-bit operating system was detected, please use the 64-bit installer."> 
    <?if $(var.Win64) = "yes" ?> 
    VersionNT64 
    <?else?> 
    NOT VersionNT64 
    <?endif?> 
</Condition> 

은 따라서 64 비트 패키지의 상태가 바로 VersionNT64 될 것이며, 통과하고 설치를 시작합니다 :

다음과 같이 당신의 상태를 다시 작성할 수 있습니다. x86 패키지를 작성하면 조건은 NOT VersionNT64으로 64 비트에서 실패하지만 32 비트에서 시작됩니다.

+1

64 비트 패키지가 32 비트 시스템에서 중단되기 전에 LaunchConditions에 도달하지 않는다는 점에 유의하십시오. 그래서 그 사건에 대한 메시지를 더 잘 만들 필요는 없습니다. –

+0

오른쪽! 힌트를 가져 주셔서 감사합니다, 마이클! 내 대답을 업데이 트하겠습니다 ... –

+0

@ 얀, 답장을 보내 주셔서 감사합니다. 내가 너를 정확히 이해할 수있게 해달라고, 나는 네가하는 말은 내가 방금 나의 상태에서 단순한 논리 오류를 만들었다 고 생각한다. 이제 나는 그것을 보았고, 나는 내 실수를 보았다고 생각한다. 다시 작성된 버전뿐만 아니라 "아니오"를 "예"로 변경하면 문제가 해결 될 것이라고 생각하는 것이 옳은 것입니까? 그래서, 내가 남을 것이다 : 'VersionNT64 AND ($ (var.Win64) = "예")' –

관련 문제