Handle a number as a parameter for custom action 19.
This commit is contained in:
parent
c8c9337aa0
commit
f51ad46a7a
|
@ -67,6 +67,8 @@ static UINT HANDLE_CustomType2(MSIPACKAGE *package, LPCWSTR source,
|
||||||
LPCWSTR target, const INT type, LPCWSTR action);
|
LPCWSTR target, const INT type, LPCWSTR action);
|
||||||
static UINT HANDLE_CustomType18(MSIPACKAGE *package, LPCWSTR source,
|
static UINT HANDLE_CustomType18(MSIPACKAGE *package, LPCWSTR source,
|
||||||
LPCWSTR target, const INT type, LPCWSTR action);
|
LPCWSTR target, const INT type, LPCWSTR action);
|
||||||
|
static UINT HANDLE_CustomType19(MSIPACKAGE *package, LPCWSTR source,
|
||||||
|
LPCWSTR target, const INT type, LPCWSTR action);
|
||||||
static UINT HANDLE_CustomType50(MSIPACKAGE *package, LPCWSTR source,
|
static UINT HANDLE_CustomType50(MSIPACKAGE *package, LPCWSTR source,
|
||||||
LPCWSTR target, const INT type, LPCWSTR action);
|
LPCWSTR target, const INT type, LPCWSTR action);
|
||||||
static UINT HANDLE_CustomType34(MSIPACKAGE *package, LPCWSTR source,
|
static UINT HANDLE_CustomType34(MSIPACKAGE *package, LPCWSTR source,
|
||||||
|
@ -193,9 +195,7 @@ UINT ACTION_CustomAction(MSIPACKAGE *package,LPCWSTR action, BOOL execute)
|
||||||
rc = HANDLE_CustomType18(package,source,target,type,action);
|
rc = HANDLE_CustomType18(package,source,target,type,action);
|
||||||
break;
|
break;
|
||||||
case 19: /* Error that halts install */
|
case 19: /* Error that halts install */
|
||||||
deformat_string(package,target,&deformated);
|
rc = HANDLE_CustomType19(package,source,target,type,action);
|
||||||
MessageBoxW(NULL,deformated,NULL,MB_OK);
|
|
||||||
rc = ERROR_FUNCTION_FAILED;
|
|
||||||
break;
|
break;
|
||||||
case 50: /*EXE file specified by a property value */
|
case 50: /*EXE file specified by a property value */
|
||||||
rc = HANDLE_CustomType50(package,source,target,type,action);
|
rc = HANDLE_CustomType50(package,source,target,type,action);
|
||||||
|
@ -624,6 +624,49 @@ static UINT HANDLE_CustomType18(MSIPACKAGE *package, LPCWSTR source,
|
||||||
return prc;
|
return prc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static UINT HANDLE_CustomType19(MSIPACKAGE *package, LPCWSTR source,
|
||||||
|
LPCWSTR target, const INT type, LPCWSTR action)
|
||||||
|
{
|
||||||
|
static const WCHAR query[] = {
|
||||||
|
'S','E','L','E','C','T',' ','`','M','e','s','s','a','g','e','`',' ',
|
||||||
|
'F','R','O','M',' ','`','E','r','r','o','r','`',' ',
|
||||||
|
'W','H','E','R','E',' ','`','E','r','r','o','r','`',' ','=',' ','%','s',0
|
||||||
|
};
|
||||||
|
MSIQUERY *view = NULL;
|
||||||
|
MSIRECORD *row = 0;
|
||||||
|
UINT r;
|
||||||
|
LPWSTR deformated = NULL;
|
||||||
|
|
||||||
|
deformat_string( package, target, &deformated );
|
||||||
|
|
||||||
|
/* first try treat the error as a number */
|
||||||
|
r = MSI_OpenQuery( package->db, &view, query, deformated );
|
||||||
|
if( r == ERROR_SUCCESS )
|
||||||
|
{
|
||||||
|
r = MSI_ViewExecute( view, 0 );
|
||||||
|
if( r == ERROR_SUCCESS )
|
||||||
|
{
|
||||||
|
r = MSI_ViewFetch( view, &row );
|
||||||
|
if( r == ERROR_SUCCESS )
|
||||||
|
{
|
||||||
|
LPCWSTR error = MSI_RecordGetString( row, 1 );
|
||||||
|
MessageBoxW( NULL, error, NULL, MB_OK );
|
||||||
|
msiobj_release( &row->hdr );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
MSI_ViewClose( view );
|
||||||
|
msiobj_release( &view->hdr );
|
||||||
|
}
|
||||||
|
|
||||||
|
if (r != ERROR_SUCCESS )
|
||||||
|
{
|
||||||
|
MessageBoxW( NULL, deformated, NULL, MB_OK );
|
||||||
|
HeapFree( GetProcessHeap(), 0, deformated );
|
||||||
|
}
|
||||||
|
|
||||||
|
return ERROR_FUNCTION_FAILED;
|
||||||
|
}
|
||||||
|
|
||||||
static UINT HANDLE_CustomType50(MSIPACKAGE *package, LPCWSTR source,
|
static UINT HANDLE_CustomType50(MSIPACKAGE *package, LPCWSTR source,
|
||||||
LPCWSTR target, const INT type, LPCWSTR action)
|
LPCWSTR target, const INT type, LPCWSTR action)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue