2012-11-30 5 views
1

인스턴스 보고서를 기반으로 완료/종료 대화 상자에 메시지를 표시하려고합니다.종료/종료 대화 상자에 동적 내용 표시 - WIX 설치자

뭔가 잘못되면 설치하는 동안 완료 화면에 오류 메시지를 표시하고 성공 메시지를 표시하려고합니다.

인스턴스 유효성을 검사하기 위해 사용자 지정 작업을 호출하고이를 기반으로 Finish 화면에서 변수 값을 설정합니다. 그러나 마침 화면에서 매번 기본 변수 값이 표시됩니다.

아래 이미지가없는 대신 동적 콘텐츠를 표시하고 싶습니다.

enter image description here

답변

1

Heres는 내 기능은 스크롤 텍스트 컨트롤에 동적 라이센스 계약을 표시합니다. 일부를 사용하여 원하는 것을 얻을 수 있습니다.

extern "C" UINT __stdcall GetLicense(MSIHANDLE hInstall) 
{ 
HRESULT hr = S_OK; 
UINT er = ERROR_SUCCESS; 
BYTE* pbData = NULL; 
DWORD cbData = 0; 
LPWSTR szValueBuf = NULL; 
char szDistributorName[MAX_PATH]; 
PMSIHANDLE hView, hRecord; 
CString szLicense; 

hr = WcaInitialize(hInstall, "GetLicense"); 
ExitOnFailure(hr, "Failed to initialize"); 

WcaLog(LOGMSG_STANDARD, "Initialized."); 

hr = ExtractBinary(L"License", &pbData, &cbData); 
ExitOnFailure(hr, "failed to extract binary data"); 

hr = WcaGetProperty(L"DISTRIBUTORNAME", &szValueBuf); 
ExitOnFailure(hr, "Failed to get the driver information"); 

wcstombs(szDistributorName, szValueBuf, 260); 
szLicense = pbData; 

int nRet = szLicense.Replace("[DISTRIBUTORNAME]", szDistributorName); 

LPCTSTR query = _T("SELECT * FROM `Control` ") 
    _T(" WHERE `Dialog_` = 'LicenseAgreementDlg' AND `Control` = 'LicenseText' "); 
UINT ret = MsiDatabaseOpenView(WcaGetDatabaseHandle(), query, &hView); 

if (ERROR_SUCCESS != ret) 
{ 
    return ERROR_INSTALL_FAILURE; 
} 

ret = MsiViewExecute(hView, 0); 

if (ERROR_SUCCESS != ret) 
{ 
    return ERROR_INSTALL_FAILURE; 
} 


ret = MsiViewFetch(hView, &hRecord); 

if (ERROR_SUCCESS != ret) 
{ 
    return ERROR_INSTALL_FAILURE; 
} 

ret = MsiViewModify(hView, MSIMODIFY_DELETE, hRecord); 

if (ERROR_SUCCESS != ret) 
{ 
    return ERROR_INSTALL_FAILURE; 
} 

ret = MsiRecordSetStringA(hRecord, 10, szLicense); 

if (ERROR_SUCCESS != ret) 
{ 
    return ERROR_INSTALL_FAILURE; 
} 

ret = MsiViewModify(hView, MSIMODIFY_INSERT_TEMPORARY, hRecord); 

if (ERROR_SUCCESS != ret) 
{ 
    return ERROR_INSTALL_FAILURE; 
} 

return ERROR_SUCCESS; 

LExit: 
er = SUCCEEDED(hr) ? ERROR_SUCCESS : ERROR_INSTALL_FAILURE; 
return WcaFinalize(er); 
} 
+1

관련 코드를 C#으로 얻을 수 있습니까? –

관련 문제