1

사용자 지정 작업 내에서 다음 단추를 숨기거나 비활성화하려고합니다. 나는 그것을 할 수있는 방법을 찾아 보았습니다. 그러나 모든 것은 사용자 정의 액션에서 변수를 설정하고이 변수가 값과 같을 때 사용할 다음 버튼을 설정하는 것이 었습니다. 이제 취소 버튼을 숨기는 방법에 대한 자습서를 찾았습니다. 나는이 동일한 메소드가 다음 버튼 (또는 그 문제의 다른 필드!)에도 사용될 수 있을지 궁금해하지만, 단지 두 개의 함수를 이해하지 못한다. 이들은 MsiCreateRecord() 및 MsiRecordSetInteger()입니다. 필드 수를 설정하여 레코드를 생성하고이 레코드를 사용하여 취소 단추를 숨기는 방법에 대한 설명을 제공 할 수 있습니까?MSI 설치 프로그램에서 사용자 지정 작업으로 다음 단추를 누름

다음은이 기능을 사용하는 Microsoft 웹 사이트의 기능입니다.

#include <windows.h> 
#include <stdio.h> 
#include <Shellapi.h> 
#include <msi.h> 
#include <Msiquery.h> 

UINT __stdcall HideCancelButton(MSIHANDLE hInstall) 
{ 
    PMSIHANDLE hRecord = MsiCreateRecord(2); 
    if (!hRecord) 
     return ERROR_INSTALL_FAILURE; 

    if (ERROR_SUCCESS != MsiRecordSetInteger(hRecord, 1, 2) 
    || ERROR_SUCCESS != MsiRecordSetInteger(hRecord, 2, 0)) 
     return ERROR_INSTALL_FAILURE; 

    MsiProcessMessage(hInstall, INSTALLMESSAGE_COMMONDATA, hRecord); 

    return ERROR_SUCCESS; 
} 

답변

0

사각형 구멍에 맞추기위한 문제입니다. MsiProcessMessage는 Msi의 UI와 통신하여 작업을 수행 할 수있는 수단입니다. 취소 버튼을 숨기는 등. 그러나 그렇게하기 위해서는 예상되는 방식으로 메시지를 보내야합니다. 여기에는 레코드가 포함됩니다. 언급 된 호출을 작성하여 채 웁니다.

필드를 설명하는 방법을 해독하기는 어렵지만 레코드 값은 모두 MsiProcessMessage에 문서화되어 있습니다.

편집 : 아니요,이 방법을 사용하여 다음 버튼에 영향을 줄 수 없습니다. 이 방법은 MsiProcessMessage를 사용하여 기본 제공 UI의 사례를 주로 지원합니다. 여기에는 취소 버튼 만 있습니다.

+1

나라면 HIDEBUTTON = 1과 같은 속성을 설정하고 상호 배타적 인 ControlEvents를 사용하여 단추를 표시 또는 비 표시로 설정한다고 가정합니다. 내가 놓친 게 있니? –

+0

죄송합니다. 제어 조건을 의미했습니다. :-) –

+0

그리고 기본 UI에 대한 제어 조건을 어떻게 설정합니까? 오,이 실수는 질문에서 실제로 묻지 않은 것입니다. 다음 버튼에 대해 그 부분을 놓쳤습니다. –

1

일반적으로 control conditions을 통해 이루어집니다. 여기에 당신을 도울 수있는 몇 가지 기사는 다음과 같습니다

는 기본적으로, 당신은 설치 속성을 통해 버튼의 가시성을 제어 할 수 있습니다. 사용자 지정 작업에서 MsiSetProperty 기능을 사용하여 해당 속성을 설정할 수 있습니다.

+2

MsiSetProperty를 통해 속성을 설정해도 컨트롤 조건이 다시 평가되지는 않습니다. 이 문제를 해결할 수있는 한 가지 방법은 속성을 설정 한 동일한 컨트롤 이벤트에서 다른 설정 속성 작업을 트리거하는 것입니다 (다시 또는 임시로). –

관련 문제