Hans Leidekker : msi: Fix the service actions to revert components to the installed state during rollback .

Alexandre Julliard julliard at winehq.org
Tue May 24 12:53:46 CDT 2011


Module: wine
Branch: master
Commit: 7dd95a386eb499ee7d5b5042eda1f08d4424e880
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=7dd95a386eb499ee7d5b5042eda1f08d4424e880

Author: Hans Leidekker <hans at codeweavers.com>
Date:   Tue May 24 10:51:33 2011 +0200

msi: Fix the service actions to revert components to the installed state during rollback.

---

 dlls/msi/action.c |   44 ++++++++++++--------------------------------
 1 files changed, 12 insertions(+), 32 deletions(-)

diff --git a/dlls/msi/action.c b/dlls/msi/action.c
index 8e4f2e1..9a55afc 100644
--- a/dlls/msi/action.c
+++ b/dlls/msi/action.c
@@ -5517,9 +5517,10 @@ static UINT ITERATE_InstallService(MSIRECORD *rec, LPVOID param)
         WARN("service component not found\n");
         goto done;
     }
-    if (!component->Enabled)
+    component->Action = msi_get_component_action( package, component );
+    if (component->Action != INSTALLSTATE_LOCAL)
     {
-        TRACE("service component disabled\n");
+        TRACE("component not scheduled for installation %s\n", debugstr_w(comp));
         goto done;
     }
     hscm = OpenSCManagerW(NULL, SERVICES_ACTIVE_DATABASEW, GENERIC_WRITE);
@@ -5680,19 +5681,12 @@ static UINT ITERATE_StartService(MSIRECORD *rec, LPVOID param)
     if (!comp)
         return ERROR_SUCCESS;
 
-    if (!comp->Enabled)
-    {
-        TRACE("component is disabled\n");
-        return ERROR_SUCCESS;
-    }
-
-    if (comp->ActionRequest != INSTALLSTATE_LOCAL)
+    comp->Action = msi_get_component_action( package, comp );
+    if (comp->Action != INSTALLSTATE_LOCAL)
     {
-        TRACE("Component not scheduled for installation: %s\n", debugstr_w(component));
-        comp->Action = comp->Installed;
+        TRACE("component not scheduled for installation %s\n", debugstr_w(component));
         return ERROR_SUCCESS;
     }
-    comp->Action = INSTALLSTATE_LOCAL;
 
     deformat_string(package, MSI_RecordGetString(rec, 2), &name);
     deformat_string(package, MSI_RecordGetString(rec, 4), &args);
@@ -5878,19 +5872,12 @@ static UINT ITERATE_StopService( MSIRECORD *rec, LPVOID param )
     if (!comp)
         return ERROR_SUCCESS;
 
-    if (!comp->Enabled)
-    {
-        TRACE("component is disabled\n");
-        return ERROR_SUCCESS;
-    }
-
-    if (comp->ActionRequest != INSTALLSTATE_ABSENT)
+    comp->Action = msi_get_component_action( package, comp );
+    if (comp->Action != INSTALLSTATE_ABSENT)
     {
-        TRACE("Component not scheduled for removal: %s\n", debugstr_w(component));
-        comp->Action = comp->Installed;
+        TRACE("component not scheduled for removal %s\n", debugstr_w(component));
         return ERROR_SUCCESS;
     }
-    comp->Action = INSTALLSTATE_ABSENT;
 
     scm = OpenSCManagerW( NULL, NULL, SC_MANAGER_CONNECT );
     if (!scm)
@@ -5961,19 +5948,12 @@ static UINT ITERATE_DeleteService( MSIRECORD *rec, LPVOID param )
     if (!comp)
         return ERROR_SUCCESS;
 
-    if (!comp->Enabled)
-    {
-        TRACE("component is disabled\n");
-        return ERROR_SUCCESS;
-    }
-
-    if (comp->ActionRequest != INSTALLSTATE_ABSENT)
+    comp->Action = msi_get_component_action( package, comp );
+    if (comp->Action != INSTALLSTATE_ABSENT)
     {
-        TRACE("Component not scheduled for removal: %s\n", debugstr_w(component));
-        comp->Action = comp->Installed;
+        TRACE("component not scheduled for removal %s\n", debugstr_w(component));
         return ERROR_SUCCESS;
     }
-    comp->Action = INSTALLSTATE_ABSENT;
 
     deformat_string( package, MSI_RecordGetString(rec, 2), &name );
     stop_service( name );




More information about the wine-cvs mailing list