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