From 8bdcaf60367084c06c77cefb21ead8b3f13e5731 Mon Sep 17 00:00:00 2001 From: Hans Leidekker Date: Mon, 22 Jan 2018 10:19:06 +0100 Subject: [PATCH] msi: Write registry values for source components too. Signed-off-by: Hans Leidekker Signed-off-by: Alexandre Julliard --- dlls/msi/action.c | 2 +- dlls/msi/tests/action.c | 36 +++++++++++++++++++++++++++++++----- 2 files changed, 32 insertions(+), 6 deletions(-) diff --git a/dlls/msi/action.c b/dlls/msi/action.c index 54295a351cf..71e45e8967a 100644 --- a/dlls/msi/action.c +++ b/dlls/msi/action.c @@ -2872,7 +2872,7 @@ static UINT ITERATE_WriteRegistryValues(MSIRECORD *row, LPVOID param) return ERROR_SUCCESS; comp->Action = msi_get_component_action( package, comp ); - if (comp->Action != INSTALLSTATE_LOCAL) + if (comp->Action != INSTALLSTATE_LOCAL && comp->Action != INSTALLSTATE_SOURCE) { TRACE("component not scheduled for installation %s\n", debugstr_w(component)); return ERROR_SUCCESS; diff --git a/dlls/msi/tests/action.c b/dlls/msi/tests/action.c index 11e244c6e22..31cc9819b0c 100644 --- a/dlls/msi/tests/action.c +++ b/dlls/msi/tests/action.c @@ -506,7 +506,22 @@ static const char wrv_component_dat[] = "Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n" "s72\tS38\ts72\ti2\tS255\tS72\n" "Component\tComponent\n" - "augustus\t\tMSITESTDIR\t0\t\taugustus\n"; + "augustus\t\tMSITESTDIR\t0\t\taugustus\n" + "caesar\t\tMSITESTDIR\t1\t\t\n"; + +static const char wrv_feature_dat[] = + "Feature\tFeature_Parent\tTitle\tDescription\tDisplay\tLevel\tDirectory_\tAttributes\n" + "s38\tS38\tL64\tL255\tI2\ti2\tS72\ti2\n" + "Feature\tFeature\n" + "feature\t\tFeature\tFeature\t2\t1\tTARGETDIR\t0\n" + "feature2\t\tFeature2\tFeature2\t2\t1\tTARGETDIR\t1"; + +static const char wrv_feature_comp_dat[] = + "Feature_\tComponent_\n" + "s38\ts72\n" + "FeatureComponents\tFeature_\tComponent_\n" + "feature\taugustus\n" + "feature2\tcaesar"; static const char wrv_registry_dat[] = "Registry\tRoot\tKey\tName\tValue\tComponent_\n" @@ -527,7 +542,8 @@ static const char wrv_registry_dat[] = "regdata12\t2\tSOFTWARE\\Wine\\msitest\tValue8\t#1\taugustus\n" "regdata13\t2\tSOFTWARE\\Wine\\msitest\tValue9\t#x1\taugustus\n" "regdata14\t2\tSOFTWARE\\Wine\\msitest\tValue10\t#x01\taugustus\n" - "regdata15\t2\tSOFTWARE\\Wine\\msitest\tValue11\t[regdata15]\taugustus\n"; + "regdata15\t2\tSOFTWARE\\Wine\\msitest\tValue11\t[regdata15]\taugustus\n" + "regdata16\t2\tSOFTWARE\\Wine\\msitest\tValue12\t#1\tcaesar\n"; static const char cf_directory_dat[] = "Directory\tDirectory_Parent\tDefaultDir\n" @@ -1752,8 +1768,8 @@ static const msi_table wrv_tables[] = { ADD_TABLE(wrv_component), ADD_TABLE(directory), - ADD_TABLE(rof_feature), - ADD_TABLE(ci2_feature_comp), + ADD_TABLE(wrv_feature), + ADD_TABLE(wrv_feature_comp), ADD_TABLE(ci2_file), ADD_TABLE(install_exec_seq), ADD_TABLE(rof_media), @@ -4988,7 +5004,7 @@ static void test_write_registry_values(void) goto error; } ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); - ok(delete_pf("msitest\\augustus", TRUE), "File installed\n"); + ok(delete_pf("msitest\\augustus", TRUE), "File not installed\n"); ok(delete_pf("msitest", FALSE), "Directory not created\n"); if (is_64bit) @@ -5111,6 +5127,15 @@ static void test_write_registry_values(void) ok(size == 1, "got %u\n", size); ok(type == REG_BINARY, "got %u\n", type); + size = sizeof(buf); + type = 0xdeadbeef; + memset(buf, 0, size); + res = RegQueryValueExA(hkey, "Value12", NULL, &type, buf, &size); + ok(res == ERROR_SUCCESS, "got %u\n", res); + ok(*(DWORD *)buf == 1, "got %u\n", *(DWORD *)buf); + ok(size == 4, "got %u\n", size); + ok(type == REG_DWORD, "got %u\n", type); + RegDeleteValueA(hkey, "Value"); RegDeleteValueA(hkey, "Value1"); RegDeleteValueA(hkey, "Value2"); @@ -5123,6 +5148,7 @@ static void test_write_registry_values(void) RegDeleteValueA(hkey, "Value9"); RegDeleteValueA(hkey, "Value10"); RegDeleteValueA(hkey, "Value11"); + RegDeleteValueA(hkey, "Value12"); RegCloseKey(hkey); RegDeleteKeyA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Wine\\msitest");