From 2d3676d912b1391b2bce58917408f017bad51cd1 Mon Sep 17 00:00:00 2001 From: Hans Leidekker Date: Tue, 2 Mar 2010 14:56:26 +0100 Subject: [PATCH] msi: Look at the requested action when stopping services, not the action taken. --- dlls/msi/action.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/dlls/msi/action.c b/dlls/msi/action.c index 0011bc54e7..b99dce24af 100644 --- a/dlls/msi/action.c +++ b/dlls/msi/action.c @@ -5173,6 +5173,7 @@ static UINT ITERATE_StopService( MSIRECORD *rec, LPVOID param ) { MSIPACKAGE *package = param; MSICOMPONENT *comp; + LPCWSTR component; LPWSTR name; DWORD event; @@ -5180,9 +5181,18 @@ static UINT ITERATE_StopService( MSIRECORD *rec, LPVOID param ) if (!(event & msidbServiceControlEventStop)) return ERROR_SUCCESS; - comp = get_loaded_component( package, MSI_RecordGetString( rec, 6 ) ); - if (!comp || comp->Action == INSTALLSTATE_UNKNOWN || comp->Action == INSTALLSTATE_ABSENT) + component = MSI_RecordGetString( rec, 6 ); + comp = get_loaded_component( package, component ); + if (!comp) + return ERROR_SUCCESS; + + if (comp->ActionRequest != INSTALLSTATE_ABSENT) + { + TRACE("Component not scheduled for removal: %s\n", debugstr_w(component)); + comp->Action = comp->Installed; return ERROR_SUCCESS; + } + comp->Action = INSTALLSTATE_ABSENT; deformat_string( package, MSI_RecordGetString( rec, 2 ), &name ); stop_service( name ); -- 2.33.8