Commit c13d84ff authored by Hans Leidekker's avatar Hans Leidekker Committed by Alexandre Julliard

msi: Look at the requested action when deleting services, not the action taken.

parent 2d3676d9
...@@ -5224,6 +5224,7 @@ static UINT ITERATE_DeleteService( MSIRECORD *rec, LPVOID param ) ...@@ -5224,6 +5224,7 @@ static UINT ITERATE_DeleteService( MSIRECORD *rec, LPVOID param )
{ {
MSIPACKAGE *package = param; MSIPACKAGE *package = param;
MSICOMPONENT *comp; MSICOMPONENT *comp;
LPCWSTR component;
LPWSTR name = NULL; LPWSTR name = NULL;
DWORD event; DWORD event;
SC_HANDLE scm = NULL, service = NULL; SC_HANDLE scm = NULL, service = NULL;
...@@ -5232,9 +5233,18 @@ static UINT ITERATE_DeleteService( MSIRECORD *rec, LPVOID param ) ...@@ -5232,9 +5233,18 @@ static UINT ITERATE_DeleteService( MSIRECORD *rec, LPVOID param )
if (!(event & msidbServiceControlEventDelete)) if (!(event & msidbServiceControlEventDelete))
return ERROR_SUCCESS; return ERROR_SUCCESS;
comp = get_loaded_component( package, MSI_RecordGetString(rec, 6) ); component = MSI_RecordGetString(rec, 6);
if (!comp || comp->Action == INSTALLSTATE_UNKNOWN || comp->Action == INSTALLSTATE_ABSENT) 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; return ERROR_SUCCESS;
}
comp->Action = INSTALLSTATE_ABSENT;
deformat_string( package, MSI_RecordGetString(rec, 2), &name ); deformat_string( package, MSI_RecordGetString(rec, 2), &name );
stop_service( name ); stop_service( name );
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment