diff --git a/dlls/msi/action.c b/dlls/msi/action.c index c1d3b496393..efdc79c1da6 100644 --- a/dlls/msi/action.c +++ b/dlls/msi/action.c @@ -7340,6 +7340,7 @@ UINT ACTION_PerformUIAction(MSIPACKAGE *package, const WCHAR *action, UINT scrip TRACE("Performing action (%s)\n", debugstr_w(action)); + package->action_progress_increment = 0; handled = ACTION_HandleStandardAction(package, action, &rc); if (!handled) diff --git a/dlls/msi/dialog.c b/dlls/msi/dialog.c index f4881fdc9ca..66d87864c52 100644 --- a/dlls/msi/dialog.c +++ b/dlls/msi/dialog.c @@ -664,7 +664,9 @@ void msi_dialog_handle_event( msi_dialog* dialog, LPCWSTR control, SendMessageW( ctrl->hwnd, PBM_SETPOS, 0, 0 ); } break; - case 1: /* FIXME: not sure what this is supposed to do */ + case 1: /* action data increment */ + if (val2) dialog->package->action_progress_increment = val1; + else dialog->package->action_progress_increment = 0; break; case 2: /* move */ if (ctrl->progress_backwards) diff --git a/dlls/msi/msipriv.h b/dlls/msi/msipriv.h index 80f54149688..bc9e5961f13 100644 --- a/dlls/msi/msipriv.h +++ b/dlls/msi/msipriv.h @@ -369,6 +369,7 @@ typedef struct tagMSIPACKAGE struct list cabinet_streams; LPWSTR ActionFormat; LPWSTR LastAction; + UINT action_progress_increment; HANDLE log_file; IAssemblyCache *cache_net[CLR_VERSION_MAX]; IAssemblyCache *cache_sxs; diff --git a/dlls/msi/package.c b/dlls/msi/package.c index 20773963b8a..b1668d3bf08 100644 --- a/dlls/msi/package.c +++ b/dlls/msi/package.c @@ -1905,8 +1905,16 @@ INT MSI_ProcessMessage( MSIPACKAGE *package, INSTALLMESSAGE eMessageType, MSIREC msi_free(deformated); ControlEvent_FireSubscribedEvent(package, szActionData, uirow); - msiobj_release(&uirow->hdr); + + if (package->action_progress_increment) + { + uirow = MSI_CreateRecord(2); + MSI_RecordSetInteger(uirow, 1, 2); + MSI_RecordSetInteger(uirow, 2, package->action_progress_increment); + ControlEvent_FireSubscribedEvent(package, szSetProgress, uirow); + msiobj_release(&uirow->hdr); + } break; case INSTALLMESSAGE_ACTIONSTART: