다음을 통해 공유


조건문 구문

이 섹션에서는 MsiEvaluateCondition 함수에서 사용하는 조건문 구문과 시퀀스 테이블 동작에 대해 설명합니다. 자세한 내용은 조건문 구문 예제를 참조하세요.

조건문 구문 요약

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

항목 통사론
symbol | literal | 정수
comparison-operator < | > | <= | >= | = | <>
학기 value | 값 비교 연산자 값 | ( 식 )|
부울 계수 term | 용어 없음
부울 용어 부울 계수 | 부울 계수 AND 용어
부울 용어 | 부울 용어 OR
상징 property | %environment-variable | $component 작업 | ?component-state | &기능 작업 | !feature-state

 

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

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

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

    메모

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

     

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

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

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

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

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

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

  • 문자열 비교의 경우 연산자에 접두사로 접두사로 지정된 "~" 타일은 대/소문자를 구분하지 않는 비교를 수행합니다.

  • 정수로 변환할 수 없는 문자열 또는 속성 값과 정수 비교는 항상 msiEvaluateConditionFalse , 비교 연산자 "<>"는 msiEvaluateConditionTrue 반환합니다.

액세스 접두사

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

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

 

논리 연산자

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

연산자 의미
접두사 단항 연산자; 다음 용어의 상태를 반전합니다.
그리고 두 용어가 모두 TRUE이면 TRUE입니다.
또는 TRUE이거나 두 용어가 모두 TRUE이면 TRUE입니다.
Xor 두 용어 중 하나만 TRUE이면 TRUE입니다.
Eqv 두 용어가 모두 TRUE이거나 두 용어가 모두 FALSE이면 TRUE입니다.
꼬마 도깨비 왼쪽 용어가 FALSE이거나 오른쪽 용어가 TRUE이면 TRUE입니다.

 

비교 연산자

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

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

 

부분 문자열 연산자

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

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

 

비트 숫자 연산자

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

연산자 의미
>< 비트 AND, TRUE이면 왼쪽 및 오른쪽 정수에 공통 비트가 있습니다.
<< True이면 왼쪽 정수의 상위 16비트가 오른쪽 정수와 같습니다.
>> True이면 왼쪽 정수의 하위 16비트가 오른쪽 정수와 같습니다.

 

기능 및 구성 요소 상태 값

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

연산자 <상태> 이 구문이 유효한 위치
$component 작업 조건 테이블 및 시퀀스 테이블에서 CostFinalize 작업 뒤입니다.
기능 작업 & 조건 테이블 및 시퀀스 테이블에서 CostFinalize 작업 뒤입니다.
!feature-state 조건 테이블 및 시퀀스 테이블에서 CostFinalize 작업 뒤입니다.
?component-state 조건 테이블 및 시퀀스 테이블에서 CostFinalize 작업 뒤입니다.

 

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

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

 

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

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

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

조건문 속성을 사용하는