조건문 구문

이 섹션에서는 MsiEvaluateCondition 함수 및 작업 순서 테이블에서 사용하는 조건문 구문을 설명합니다. 자세한 내용은 조건문 구문 예제를 참조하세요.

조건문 구문 요약

이 표와 다음 목록에는 조건식에서 사용할 구문이 요약되어 있습니다.

항목 Syntax
value 기호 | 리터럴 | 정수
비교 연산자 < | > | <= | >= | = | <>
용어 값 | 값 비교 연산자 값 | ( 식 )|
부울 계수 항 | NOT
부울 항 부울 계수 | 부울 계수 AND
부울 항 | 부울 항 OR
기호 property | %environment-variable | $component 작업 | ?component-state | 기능 작업 | !feature-state

 

  • 기호 이름과 값은 대/소문자를 구분합니다.

  • 환경 변수 이름은 대/소문자를 구분하지 않습니다.

  • 리터럴 텍스트는 따옴표("텍스트")로 묶어야 합니다.

    참고

    따옴표를 포함하는 리터럴 텍스트는 리터럴 텍스트 내에 따옴표에 대한 이스케이프 문자가 없으므로 조건문에서 사용할 수 없습니다. 따옴표를 포함하는 리터럴 텍스트에 대해 비교를 수행하려면 속성에 리터럴 텍스트를 배치해야 합니다. 예를 들어 SERVERNAME 속성에 따옴표가 없는지 확인하려면 속성 테이블에서 값이 "인 QUOTES라는 속성을 정의하고 조건을 NOT SERVERNAME><QUOTES로 변경합니다.

     

  • 존재하지 않는 속성 값은 빈 문자열로 처리됩니다.

  • 부동 소수점 숫자 값은 지원되지 않습니다.

  • 연산자와 우선 순위는 BASIC 및 SQL 언어와 동일합니다.

  • 산술 연산자는 지원되지 않습니다.

  • 괄호를 사용하여 연산자 우선 순위를 재정의할 수 있습니다.

  • 연산자는 대/소문자를 구분하지 않습니다.

  • 문자열 비교의 경우 연산자 앞에 물결표 "~"가 있으면 대/소문자를 구분하지 않는 비교를 수행합니다.

  • 정수로 변환할 수 없는 문자열 또는 속성 값을 정수와 비교하는 것은 항상 msiEvaluateConditionFalse입니다. 예외적으로 비교 연산자 "<>"는 msiEvaluateConditionTrue를 반환합니다.

액세스 접두사

다음 표에서는 조건식에 사용할 다양한 시스템 및 설치 관리자 정보에 액세스하는 데 사용할 접두사를 보여 줍니다.

기호 형식 접두사
설치 관리자 속성 (없음) 속성(Property) 테이블의 값입니다.
환경 변수 % 환경 변수 이름입니다.
Component 테이블 키 $ 구성 요소의 작업 상태입니다.
Component 테이블 키 ? 구성 요소의 설치된 상태입니다.
Feature 테이블 키 & 기능의 작업 상태입니다.
Feature 테이블 키 ! 기능의 설치된 상태입니다.

 

논리 연산자

다음 표에서는 높은 우선 순위에서 낮은 우선 순위 순서로 조건식의 논리 연산자를 보여 줍니다.

연산자 의미
Not 접두사 단항 연산자로 다음 항의 상태를 반전합니다.
And 두 항이 모두 TRUE이면 TRUE입니다.
또는 두 항 중 하나가 TRUE이면 TRUE입니다.
Xor 두 항 중 하나라도 TRUE이면 TRUE입니다.
Eqv 두 항이 모두 TRUE이거나 두 항이 모두 FALSE이면 TRUE입니다.
Imp 왼쪽 항이 FALSE이거나 오른쪽 항이 TRUE이면 TRUE입니다.

 

비교 연산자

다음 표에서는 조건식에 사용되는 비교 연산자를 보여 줍니다. 이러한 비교 연산자는 두 값 사이에서만 발생할 수 있습니다.

연산자 의미
= 왼쪽 값이 오른쪽 값과 같으면 TRUE입니다.
<> 왼쪽 값이 오른쪽 값과 같지 않으면 TRUE입니다.
> 왼쪽 값이 오른쪽 값보다 크면 TRUE입니다.
>= 왼쪽 값이 오른쪽 값보다 크거나 같으면 TRUE입니다.
< 왼쪽 값이 오른쪽 값보다 작으면 TRUE입니다.
<= 왼쪽 값이 오른쪽 값보다 작거나 같으면 TRUE입니다.

 

부분 문자열 연산자

다음 표에서는 조건식에 사용되는 부분 문자열 연산자를 보여 줍니다. 부분 문자열 연산자는 두 문자열 값 사이에 사용할 수 있습니다.

연산자 의미
>< 왼쪽 문자열에 오른쪽 문자열이 포함되면 TRUE입니다.
<< 왼쪽 문자열이 오른쪽 문자열로 시작되면 TRUE입니다.
>> 왼쪽 문자열이 오른쪽 문자열로 끝나면 TRUE입니다.

 

비트 숫자 연산자

다음 표에서는 조건식에서 비트 숫자 연산자를 보여 줍니다. 이러한 연산자는 두 정수 값 사이에 사용할 수 있습니다.

연산자 의미
>< 비트 AND, 왼쪽 및 오른쪽 정수에 공통 비트가 있는 경우 TRUE입니다.
<< 왼쪽 정수의 상위 16비트가 오른쪽 정수와 같은 경우 TRUE입니다.
>> 왼쪽 정수의 하위 16비트가 오른쪽 정수와 같은 경우 TRUE입니다.

 

기능 및 구성 요소 상태 값

다음 표에서는 기능 및 구성 요소 연산자 기호를 사용하는 것이 유효한 위치를 보여 줍니다.

연산자 <상태> 이 구문이 유효한 위치
$component-action 조건 테이블, 시퀀스 테이블, CostFinalize 작업 뒤
기능 작업 조건 테이블, 시퀀스 테이블, CostFinalize 작업 뒤
!feature-state 조건 테이블, 시퀀스 테이블, CostFinalize 작업 뒤
?component-state 조건 테이블, 시퀀스 테이블, CostFinalize 작업 뒤

 

다음 표에서는 조건식에 사용되는 기능 및 구성 요소 상태 값을 보여 줍니다. 이러한 상태는 직접 또는 CostFinalize 작업을 통해 MsiSetInstallLevel이 호출될 때까지 설정되지 않습니다.

의미
INSTALLSTATE_UNKNOWN -1 기능 또는 구성 요소에 대해 수행할 작업이 없습니다.
INSTALLSTATE_ADVERTISED 1 보급된 기능입니다. 구성 요소에는 이 상태를 사용할 수 없습니다.
INSTALLSTATE_ABSENT 2 기능 또는 구성 요소가 없습니다.
INSTALLSTATE_LOCAL 3 로컬 컴퓨터의 기능 또는 구성 요소입니다.
INSTALLSTATE_SOURCE 4 원본에서 실행되는 기능 또는 구성 요소입니다.

 

예를 들어 조건식 "&MyFeature=3"은 MyFeature가 현재 상태에서 로컬 컴퓨터에 설치되는 상태로 변경되는 경우에만 True로 평가됩니다. INSTALLSTATE_LOCAL.

Component1이 컴퓨터에 로컬로 설치되어 있는지 여부를 확인하기 위해 $Component1=3 조건에 의존해서는 안 됩니다. 둘 이상의 제품에서 Component1을 설치하면 실패할 수 있습니다. Product1에서 Component1을 로컬로 설치한 후 설치 관리자는 Product2를 설치하는 동안 $Component1=3 조건을 False로 평가합니다. 이는 설치 관리자가 구성 요소의 키 경로를 사용하여 구성 요소의 버전을 결정하고 해당 버전이 설치된 구성 요소보다 크거나 같은 경우 설치할 구성 요소를 표시하기 때문입니다.

설치 관리자는 조건문에서 Version 데이터 형식을 직접 비교하지 않습니다. 예를 들어 조건문에서 비교 연산자를 사용하여 "01.10" 및 "1.010"과 같은 버전을 비교할 수 없습니다. 대신 유효한 메서드를 사용하여 기존 애플리케이션, 파일, 레지스트리 항목 또는 .ini 파일 항목 검색에 설명된 대로 버전을 검색한 다음, 속성을 설정합니다.

조건문에서 속성 사용