Properly handle -1 as a registry key root.
diff --git a/dlls/msi/action.c b/dlls/msi/action.c
index 80e1e8e..fb06127 100644
--- a/dlls/msi/action.c
+++ b/dlls/msi/action.c
@@ -1700,12 +1700,11 @@
LPCWSTR Condition;
Condition = MSI_RecordGetString(row,3);
- if (MSI_EvaluateConditionW(package,Condition) ==
- MSICONDITION_TRUE)
+ if (MSI_EvaluateConditionW(package,Condition) == MSICONDITION_TRUE)
{
int level = MSI_RecordGetInteger(row,2);
- TRACE("Reseting feature %s to level %i\n",
- debugstr_w(Feature), level);
+ TRACE("Reseting feature %s to level %i\n", debugstr_w(Feature),
+ level);
package->features[feature_index].Level = level;
}
}
@@ -1875,8 +1874,6 @@
return SetFeatureStates(package);
}
-
-
/* OK this value is "interpreted" and then formatted based on the
first few characters */
static LPSTR parse_value(MSIPACKAGE *package, LPCWSTR value, DWORD *type,
@@ -2056,6 +2053,23 @@
/* get the root key */
switch (root)
{
+ case -1:
+ {
+ static const WCHAR szALLUSER[] = {'A','L','L','U','S','E','R','S',0};
+ LPWSTR all_users = load_dynamic_property(package, szALLUSER, NULL);
+ if (all_users && all_users[0] == '1')
+ {
+ root_key = HKEY_LOCAL_MACHINE;
+ szRoot = szHLM;
+ }
+ else
+ {
+ root_key = HKEY_CURRENT_USER;
+ szRoot = szHCU;
+ }
+ HeapFree(GetProcessHeap(),0,all_users);
+ }
+ break;
case 0: root_key = HKEY_CLASSES_ROOT;
szRoot = szHCR;
break;