MsiProcessMessage를 사용하여 Windows Installer에 메시지 보내기
MsiProcessMessage를 사용하여 보낸 메시지는 MsiSetExternalUI가 호출된 경우 INSTALLUI_HANDLER 콜백 함수에서 받은 것과 동일한 메시지입니다. 그렇지 않으면 Windows Installer가 메시지를 처리합니다. 자세한 내용은 Windows Installer 메시지 구문 분석을 참조하세요.
예를 들어 MB_ICONWARNING 아이콘과 MB_ABORTRETRYCANCEL 단추가 있는 INSTALLMESSAGE_ERROR 메시지를 보내려면 다음을 수행합니다.
PMSIHANDLE hInstall;
PMSIHANDLE hRec;
MsiProcessMessage(hInstall, INSTALLMESSAGE(INSTALLMESSAGE_ERROR|MB_ABORTRETRYIGNORE|MB_ICONWARNING), hRec);
여기서 hInstall은 MsiOpenProduct 또는 MsiOpenPackage의 사용자 지정 작업 또는 hProduct 핸들에 제공되는 설치에 대한 핸들이며 hRec는 형식을 지정할 오류 정보를 포함하는 레코드입니다. 형식 지정이 수행되는 방법에 대한 자세한 내용은 MsiFormatRecord를 참조하세요.
기본적으로 단추 유형 또는 아이콘 유형을 지정하지 않고 INSTALLMESSAGE_ERROR 또는 INSTALLMESSAGE_FATALEXIT 메시지를 보내면 MB_OK, 아이콘 없음 및 MB_DEFBUTTON1이 사용됩니다.
Windows Installer는 MB_ABORTRETRYIGNORE 단추 사양이 있는 MessageBox를 표시할 때 "중단" 문자열로 ABORT 단추에 레이블을 지정하지 않고 대신 "취소" 문자열로 단추에 레이블을 지정합니다. 모든 오류 메시지는 "중단"이라는 단어를 사용하지 않고 대신 "취소"라는 단어를 사용합니다.
MsiProcessMessage 함수의 hRecord 매개 변수는 MsiProcessMessage로 보낸 시지 유형에 따라 달라집니다. 다음 목록에서는 메시지 유형과 관련하여 레코드의 요구 사항을 자세히 설명합니다.
INSTALLMESSAGE_FATALEXIT
INSTALLMESSAGE_INFO
INSTALLMESSAGE_OUTOFDISKSPACE
필드 | 설명 |
---|---|
0 | 결과 문자열의 형식 지정을 위한 템플릿입니다. 자세한 내용은 MsiFormatRecord를 참조하세요. 레코드의 필드는 필드 1의 경우 [1], 필드 2의 경우 [2]를 사용하여 참조됩니다. |
1~n | 모든 후속 필드는 필드 0의 템플릿에서 참조하는 필드와 직접 관련됩니다. |
필드 0이 null이면 UI 처리기에서 받은 문자열의 형식은 1: [필드 1의 데이터] 2: [필드 2의 데이터]로 지정됩니다. 즉, 레코드의 필드마다 필드 번호와 필드에 저장된 데이터가 문자열에 포함됩니다.
MsiProcessMessage의 정보 메시지는 MsiEnableLog, '/l' 명령줄 옵션 또는 로깅 정책에서 'I' 또는 INSTALLLOGMODE_INFO를 지정할 때 기록됩니다.
INSTALLMESSAGE_ERROR
INSTALLMESSAGE_WARNING
INSTALLMESSAGE_USER
오류 테이블의 메시지를 사용하려면 다음과 같아야 합니다.
필드 | Description |
---|---|
0 | Null이어야 합니다. |
1 | 오류 테이블의 메시지 번호입니다. |
2~n | 오류 테이블의 지정된 메시지와 관련됩니다. |
예를 들어 모바일 서비스는 스크립트 실행 간에 상태를 유지하지 않으므로 스크립트 실행 간에 지속되어야 하는 모든 데이터를 테이블에 저장해야 합니다.
필드 | 형식 | 데이터 |
---|---|---|
0 | 문자열 | null |
1 | int | 1304 |
2 | 문자열 | Myfile.txt |
UI 처리기에서 받은 결과 메시지는 다음과 같습니다.
오류 1304. Myfile.txt 파일에 쓰는 동안 오류가 발생했습니다. 해당 디렉터리에 액세스할 수 있는지 확인하십시오.
필드 0이 Null이 아니면 오류 테이블의 메시지가 재정의됩니다. 대신 필드 0 템플릿은 메시지의 형식을 결정합니다.
또한 메시지는 위에서 설명한 대로 기본 단추 및 메시지와 함께 사용할 아이콘을 포함하여 단추를 지정할 수도 있습니다. 단추 및 아이콘 유형은 INSTALLUI_HANDLER에 나열되어 있습니다.
INSTALLMESSAGE_COMMONDATA
이 메시지는 진행률 대화 상자에서 취소 단추를 사용하거나 사용하지 않도록 설정하기 위해 보내집니다.
필드 | Description |
---|---|
0 | 사용되지 않습니다. |
1 | 2는 취소 단추를 나타냅니다. |
2 | 값이 1이면 취소 단추가 표시되어야 함을 나타냅니다. 값이 0이면 취소 단추가 표시되지 않아야 함을 나타냅니다. |
예를 들어 취소 단추를 사용하지 않도록 설정하거나 숨기려면 레코드가 다음과 같이 표시됩니다.
필드 | 형식 | 데이터 |
---|---|---|
0 | 문자열 | null |
1 | int | 2 |
2 | int | 0 |
INSTALLMESSAGE_ACTIONSTART
INSTALLMESSAGE_ACTIONDATA
INSTALLMESSAGE_ACTIONSTART 레코드는 ActionData 레코드의 형식을 결정합니다.
필드 | Description |
---|---|
0 | null |
1 | 작업 이름 이 필드의 이름은 Null이 아니어야 합니다. |
2 | 작업 설명입니다. |
3 | 작업 템플릿입니다. 이 템플릿에 따라 메시지의 형식을 지정하는 ActionData에 사용됩니다. |
작업 템플릿 메시지에서 필드 0을 참조하지 마세요.
INSTALLMESSAGE_ACTIONDATA 레코드의 형식은 다음과 같습니다.
필드 | 설명 |
---|---|
0 | null |
1~n | ActionText 테이블에 지정된 해당 INSTALLMESSAGE_ACTIONSTART 메시지 또는 템플릿의 필드 3에 따라 달라집니다. |
예를 들어 INSTALLMESSAGE_ACTIONSTART 레코드입니다.
필드 | 형식 | 데이터 |
---|---|---|
0 | 문자열 | null |
1 | 문자열 | MyAction |
2 | 문자열 | "MyAction"에 대한 설명입니다. |
3 | 문자열 | MyAction 템플릿: 필드 1 데이터는 [1]입니다. 필드 2 데이터는 [2]입니다. |
INSTALLMESSAGE_ACTIONSTART(필드 3)의 템플릿은 필드 1과 2를 참조하며, INSTALLMESSAGE_ACTIONDATA 레코드에는 보증된 데이터가 포함된 2개의 필드가 있어야 합니다. 필드는 문자열 또는 정수 필드일 수 있습니다.
INSTALLMESSAGE_ACTIONDATA 레코드입니다.
필드 | 형식 | 데이터 |
---|---|---|
0 | 문자열 | null |
1 | int | 2 |
2 | 문자열 | MyAction의 ActionData |
INSTALLMESSAGE_FILESINUSE
FILESINUSE 레코드는 가변 길이 레코드입니다.
필드 | Description |
---|---|
0 | 이 필드는 Null일 수 있습니다. 기본 UI를 사용하는 설치의 경우 이 필드는 FilesInUse 대화 상자의 ListBox 컨트롤에 표시할 정적 텍스트를 지정할 수 있습니다. 전체 UI를 사용하는 설치의 경우 사용자 지정 FilesInUse 대화 상자를 작성하여 텍스트가 지정되므로 이 필드는 영향을 주지 않습니다. |
1 | 사용 중인 파일의 이름입니다. |
2 | 이 필드는 사용 중인 파일을 보유하는 프로세스를 식별합니다. Windows Installer 버전 4.0: 프로세스의 PID(프로세스 ID) 또는 프로세스에 대한 창의 제목입니다. Windows Installer 버전 3.1 이하: 이 필드는 프로세스의 PID(프로세스 ID)여야 합니다. |
예를 들어 사용 중인 두 파일(red.exe 및 blue.exe)을 보여 주는 FilesInUse 메시지를 보내려면 레코드에 4개의 필드와 필드 0이 있습니다. 레코드의 형식은 다음 표와 같이 표시됩니다. 이 예제에는 Windows Installer 버전 4.0이 필요합니다.
Windows Installer 버전 3.1 이하: 다음 예제의 필드 2와 4에는 사용 중인 red.exe 및 blue.exe를 보유하는 프로세스의 PID가 포함되어야 합니다.
필드 | 설명 |
---|---|
0 | null |
1 | Red.exe |
2 | 빨간색 창 제목 |
3 | Blue.exe |
4 | 파란색 창 제목 |
참고
Windows Installer 버전 4.0에서 서비스에서 전달된 PID에 시스템 트레이 애플리케이션과 같은 창 제목이 없으면 파일이 표시되지 않고 자세한 정보 로그에 다음 메시지가 포함됩니다.
File In Use: -<FileName>- Window could not be found. Process ID: <PID>
No window with title could be found for FilesInUse
INSTALLMESSAGE_RESOLVESOURCE
INSTALLMESSAGE_RESOLVESOURCE 레코드에는 7개의 필드가 있습니다. INSTALLMESSAGE_RESOLVESOURCE가 올바르게 작동하려면 외부 UI 처리기가 INSTALLMESSAGE_RESOLVESOURCE 메시지를 처리하지 못할 수 있습니다. Windows Installer는 INSTALLMESSAGE_RESOLVESOURCE 메시지를 처리해야 합니다. 즉, 외부 UI 처리기는 INSTALLMESSAGE_RESOLVESOURCE 메시지를 필터링할 때 "수행된 작업 없음"을 나타내기 위해 0을 반환합니다. RESOLVESOURCE 메시지를 보내지 않는 것이 가장 좋습니다.
필드 | 설명 |
---|---|
0 | null |
1 | null |
2 | 패키지 이름입니다. |
3 | 제품 코드입니다. |
4 | 알려진 경우 상대 경로는 Null일 수 있습니다. |
5 | 0 |
6 | 패키지 코드의 유효성을 검사할지 여부입니다. 값 '1'은 패키지 코드의 유효성을 검사해야 함을 나타냅니다. 값 '0'은 패키지 코드의 유효성을 검사하지 않아야 함을 나타냅니다. |
7 | 미디어 테이블의 필수 디스크입니다. 값 '0'은 모든 디스크가 허용됨을 나타냅니다. |