msi: Look at the requested action when stopping services, not the action taken.
This commit is contained in:
parent
87448dcaeb
commit
2d3676d912
|
@ -5173,6 +5173,7 @@ static UINT ITERATE_StopService( MSIRECORD *rec, LPVOID param )
|
|||
{
|
||||
MSIPACKAGE *package = param;
|
||||
MSICOMPONENT *comp;
|
||||
LPCWSTR component;
|
||||
LPWSTR name;
|
||||
DWORD event;
|
||||
|
||||
|
@ -5180,10 +5181,19 @@ 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 );
|
||||
msi_free( name );
|
||||
|
|
Loading…
Reference in New Issue