msi: install_on_demand and Extension install state corrections

Aric Stewart aric at codeweavers.com
Thu Jun 2 08:21:49 CDT 2005


add install_on_demand for Extension servers also. currently defaulting 
to TRUE
Extension need to have 1 verb to mark the given progid to be installed.
-------------- next part --------------
Index: dlls//msi/action.c
===================================================================
RCS file: /home/wine/wine/dlls/msi/action.c,v
retrieving revision 1.127
diff -u -r1.127 action.c
--- dlls//msi/action.c	2 Jun 2005 10:29:57 -0000	1.127
+++ dlls//msi/action.c	2 Jun 2005 12:57:10 -0000
@@ -6764,12 +6841,18 @@
     HKEY hkey;
     INT i;
     MSIRECORD *uirow;
+    BOOL install_on_demand = TRUE;
 
     if (!package)
         return ERROR_INVALID_HANDLE;
 
     load_classes_and_such(package);
 
+    /* We need to set install_on_demand based on if the shell handles advertised
+     * shortcuts and the like. Because Mike McCormack is working on this i am
+     * going to default to TRUE
+     */
+    
     for (i = 0; i < package->loaded_extensions; i++)
     {
         WCHAR extension[257];
@@ -6787,8 +6870,8 @@
          */
         if ((!ACTION_VerifyFeatureForAction(package, f_index,
                                 INSTALLSTATE_LOCAL)) &&
-            (!ACTION_VerifyFeatureForAction(package, f_index,
-                                INSTALLSTATE_ADVERTISED)))
+             !(install_on_demand && ACTION_VerifyFeatureForAction(package,
+                             f_index, INSTALLSTATE_ADVERTISED)))
         {
             TRACE("Skipping extension  %s reg due to disabled feature %s\n",
                             debugstr_w(package->extensions[i].Extension),
@@ -6802,7 +6885,11 @@
 
         package->extensions[i].Installed = TRUE;
 
-        if (package->extensions[i].ProgIDIndex >= 0)
+        /* this is only registered if the extension has at least 1 verb
+         * according to MSDN
+         */
+        if (package->extensions[i].ProgIDIndex >= 0 &&
+                package->extensions[i].VerbCount > 0)
            mark_progid_for_install(package, package->extensions[i].ProgIDIndex);
 
         if (package->extensions[i].MIMEIndex >= 0)



More information about the wine-patches mailing list