msi: Look at the requested action when moving files, not the action taken.
authorHans Leidekker <hans@codeweavers.com>
Tue, 2 Mar 2010 13:57:14 +0000 (14:57 +0100)
committerAlexandre Julliard <julliard@winehq.org>
Tue, 2 Mar 2010 15:11:49 +0000 (16:11 +0100)
dlls/msi/action.c

index 278d479af242b5f6e9a51cf5b1c4a3fea335536a..879a0137e52fe5379f3817efe563bb720fe6eab0 100644 (file)
@@ -6115,7 +6115,7 @@ static UINT ITERATE_MoveFiles( MSIRECORD *rec, LPVOID param )
 {
     MSIPACKAGE *package = param;
     MSICOMPONENT *comp;
-    LPCWSTR sourcename;
+    LPCWSTR sourcename, component;
     LPWSTR destname = NULL;
     LPWSTR sourcedir = NULL, destdir = NULL;
     LPWSTR source = NULL, dest = NULL;
@@ -6123,13 +6123,18 @@ static UINT ITERATE_MoveFiles( MSIRECORD *rec, LPVOID param )
     DWORD size;
     BOOL ret, wildcards;
 
-    comp = get_loaded_component(package, MSI_RecordGetString(rec, 2));
-    if (!comp || !comp->Enabled ||
-        !(comp->Action & (INSTALLSTATE_LOCAL | INSTALLSTATE_SOURCE)))
+    component = MSI_RecordGetString(rec, 2);
+    comp = get_loaded_component(package, component);
+    if (!comp)
+        return ERROR_SUCCESS;
+
+    if (comp->ActionRequest != INSTALLSTATE_LOCAL && comp->ActionRequest != INSTALLSTATE_SOURCE)
     {
-        TRACE("Component not set for install, not moving file\n");
+        TRACE("Component not scheduled for installation: %s\n", debugstr_w(component));
+        comp->Action = comp->Installed;
         return ERROR_SUCCESS;
     }
+    comp->Action = comp->ActionRequest;
 
     sourcename = MSI_RecordGetString(rec, 3);
     options = MSI_RecordGetInteger(rec, 7);