msi: Store the current script in the package.

Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
Signed-off-by: Hans Leidekker <hans@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Zebediah Figura 2018-06-06 00:59:22 -05:00 committed by Alexandre Julliard
parent 536a86f21f
commit 756bbb5bb7
7 changed files with 26 additions and 19 deletions

View File

@ -510,7 +510,7 @@ static UINT ITERATE_Actions(MSIRECORD *row, LPVOID param)
return ERROR_SUCCESS;
}
rc = ACTION_PerformAction(package, action, SCRIPT_NONE);
rc = ACTION_PerformAction(package, action);
msi_dialog_check_messages( NULL );
@ -604,7 +604,7 @@ static UINT ACTION_ProcessUISequence(MSIPACKAGE *package)
/********************************************************
* ACTION helper functions and functions that perform the actions
*******************************************************/
static UINT ACTION_HandleCustomAction(MSIPACKAGE *package, LPCWSTR action, UINT script)
static UINT ACTION_HandleCustomAction(MSIPACKAGE *package, LPCWSTR action)
{
UINT arc;
INT uirc;
@ -613,7 +613,7 @@ static UINT ACTION_HandleCustomAction(MSIPACKAGE *package, LPCWSTR action, UINT
if (uirc == IDCANCEL)
return ERROR_INSTALL_USEREXIT;
ui_actioninfo(package, action, TRUE, 0);
arc = ACTION_CustomAction( package, action, script );
arc = ACTION_CustomAction(package, action);
uirc = !arc;
if (arc == ERROR_FUNCTION_NOT_CALLED && needs_ui_sequence(package))
@ -1546,11 +1546,13 @@ static UINT execute_script( MSIPACKAGE *package, UINT script )
TRACE("executing script %u\n", script);
package->script = script;
if (script == SCRIPT_ROLLBACK)
{
for (i = package->script_actions_count[script]; i > 0; i--)
{
rc = ACTION_PerformAction(package, package->script_actions[script][i-1], script);
rc = ACTION_PerformAction(package, package->script_actions[script][i-1]);
if (rc != ERROR_SUCCESS)
{
ERR("Execution of script %i halted; action %s returned %u\n",
@ -1563,7 +1565,7 @@ static UINT execute_script( MSIPACKAGE *package, UINT script )
{
for (i = 0; i < package->script_actions_count[script]; i++)
{
rc = ACTION_PerformAction(package, package->script_actions[script][i], script);
rc = ACTION_PerformAction(package, package->script_actions[script][i]);
if (rc != ERROR_SUCCESS)
{
ERR("Execution of script %i halted; action %s returned %u\n",
@ -1572,6 +1574,9 @@ static UINT execute_script( MSIPACKAGE *package, UINT script )
}
}
}
package->script = SCRIPT_NONE;
msi_free_action_script(package, script);
return rc;
}
@ -5672,7 +5677,7 @@ static UINT ACTION_ExecuteAction(MSIPACKAGE *package)
msiobj_release(&uirow->hdr);
}
else
rc = ACTION_PerformAction(package, action, SCRIPT_NONE);
rc = ACTION_PerformAction(package, action);
/* Send all set properties. */
if (!MSI_OpenQuery(package->db, &view, prop_query))
@ -7919,7 +7924,7 @@ static UINT ACTION_HandleStandardAction(MSIPACKAGE *package, LPCWSTR action)
return rc;
}
UINT ACTION_PerformAction(MSIPACKAGE *package, const WCHAR *action, UINT script)
UINT ACTION_PerformAction(MSIPACKAGE *package, const WCHAR *action)
{
UINT rc;
@ -7929,7 +7934,7 @@ UINT ACTION_PerformAction(MSIPACKAGE *package, const WCHAR *action, UINT script)
rc = ACTION_HandleStandardAction(package, action);
if (rc == ERROR_FUNCTION_NOT_CALLED)
rc = ACTION_HandleCustomAction(package, action, script);
rc = ACTION_HandleCustomAction(package, action);
if (rc == ERROR_FUNCTION_NOT_CALLED)
WARN("unhandled msi action %s\n", debugstr_w(action));
@ -7982,7 +7987,7 @@ static UINT ACTION_PerformActionSequence(MSIPACKAGE *package, UINT seq)
return ERROR_FUNCTION_FAILED;
}
rc = ACTION_PerformAction(package, action, SCRIPT_NONE);
rc = ACTION_PerformAction(package, action);
msiobj_release(&row->hdr);
}
@ -8071,7 +8076,7 @@ UINT MSI_InstallPackage( MSIPACKAGE *package, LPCWSTR szPackagePath,
msi_set_property( package->db, szRollbackDisabled, szOne, -1 );
}
rc = ACTION_PerformAction(package, action, SCRIPT_NONE);
rc = ACTION_PerformAction(package, action);
/* process the ending type action */
if (rc == ERROR_SUCCESS)

View File

@ -1208,7 +1208,7 @@ static UINT defer_custom_action( MSIPACKAGE *package, const WCHAR *action, UINT
return ERROR_SUCCESS;
}
UINT ACTION_CustomAction( MSIPACKAGE *package, LPCWSTR action, UINT script )
UINT ACTION_CustomAction(MSIPACKAGE *package, const WCHAR *action)
{
static const WCHAR query[] = {
'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ',
@ -1248,7 +1248,7 @@ UINT ACTION_CustomAction( MSIPACKAGE *package, LPCWSTR action, UINT script )
if (type & msidbCustomActionTypeNoImpersonate)
WARN("msidbCustomActionTypeNoImpersonate not handled\n");
if (!action_type_matches_script( type, script ))
if (!action_type_matches_script(type, package->script))
{
rc = defer_custom_action( package, action, type );
goto end;

View File

@ -4363,7 +4363,7 @@ static UINT event_spawn_wait_dialog( msi_dialog *dialog, const WCHAR *argument )
static UINT event_do_action( msi_dialog *dialog, const WCHAR *argument )
{
ACTION_PerformAction( dialog->package, argument, SCRIPT_NONE );
ACTION_PerformAction(dialog->package, argument);
return ERROR_SUCCESS;
}

View File

@ -83,7 +83,7 @@ UINT WINAPI MsiDoActionW( MSIHANDLE hInstall, LPCWSTR szAction )
return remote_DoAction(remote, szAction);
}
ret = ACTION_PerformAction( package, szAction, SCRIPT_NONE );
ret = ACTION_PerformAction(package, szAction);
msiobj_release( &package->hdr );
return ret;

View File

@ -3742,7 +3742,7 @@ UINT WINAPI MsiCollectUserInfoW(LPCWSTR szProduct)
if (!package)
return ERROR_CALL_NOT_IMPLEMENTED;
rc = ACTION_PerformAction(package, szFirstRun, SCRIPT_NONE);
rc = ACTION_PerformAction(package, szFirstRun);
msiobj_release( &package->hdr );
MsiCloseHandle(handle);
@ -3768,7 +3768,7 @@ UINT WINAPI MsiCollectUserInfoA(LPCSTR szProduct)
if (!package)
return ERROR_CALL_NOT_IMPLEMENTED;
rc = ACTION_PerformAction(package, szFirstRun, SCRIPT_NONE);
rc = ACTION_PerformAction(package, szFirstRun);
msiobj_release( &package->hdr );
MsiCloseHandle(handle);
@ -3849,7 +3849,7 @@ UINT WINAPI MsiConfigureFeatureW(LPCWSTR szProduct, LPCWSTR szFeature, INSTALLST
MsiSetInternalUI( INSTALLUILEVEL_BASIC, NULL );
r = ACTION_PerformAction( package, szCostInitialize, SCRIPT_NONE );
r = ACTION_PerformAction(package, szCostInitialize);
if (r != ERROR_SUCCESS)
goto end;

View File

@ -414,6 +414,7 @@ typedef struct tagMSIPACKAGE
struct list mimes;
struct list appids;
enum script script;
LPWSTR *script_actions[SCRIPT_MAX];
int script_actions_count[SCRIPT_MAX];
LPWSTR *unique_actions;
@ -975,9 +976,9 @@ extern WCHAR *gszLogFile DECLSPEC_HIDDEN;
extern HINSTANCE msi_hInstance DECLSPEC_HIDDEN;
/* action related functions */
extern UINT ACTION_PerformAction(MSIPACKAGE *package, const WCHAR *action, UINT script) DECLSPEC_HIDDEN;
extern UINT ACTION_PerformAction(MSIPACKAGE *package, const WCHAR *action) DECLSPEC_HIDDEN;
extern void ACTION_FinishCustomActions( const MSIPACKAGE* package) DECLSPEC_HIDDEN;
extern UINT ACTION_CustomAction(MSIPACKAGE *, const WCHAR *, UINT) DECLSPEC_HIDDEN;
extern UINT ACTION_CustomAction(MSIPACKAGE *package, const WCHAR *action) DECLSPEC_HIDDEN;
/* actions in other modules */
extern UINT ACTION_AppSearch(MSIPACKAGE *package) DECLSPEC_HIDDEN;

View File

@ -1119,6 +1119,7 @@ MSIPACKAGE *MSI_CreatePackage( MSIDATABASE *db )
msi_load_admin_properties( package );
package->log_file = INVALID_HANDLE_VALUE;
package->script = SCRIPT_NONE;
}
return package;
}