Module: wine Branch: master Commit: 2d3676d912b1391b2bce58917408f017bad51cd1 URL: http://source.winehq.org/git/wine.git/?a=commit;h=2d3676d912b1391b2bce589174...
Author: Hans Leidekker hans@codeweavers.com Date: Tue Mar 2 14:56:26 2010 +0100
msi: Look at the requested action when stopping services, not the action taken.
---
dlls/msi/action.c | 14 ++++++++++++-- 1 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/dlls/msi/action.c b/dlls/msi/action.c index 0011bc5..b99dce2 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 );