Signed-off-by: Zebediah Figura z.figura12@gmail.com --- The test fails on 64-bit versions of Windows <= 7, so I must assume it to be a bug fixed in Windows 8.
dlls/msi/tests/Makefile.in | 4 +++- dlls/msi/tests/action.c | 49 ++++++++++++++++++++++++++++++++++++++-------- dlls/msi/tests/rsrc.rc | 22 +++++++++++++++++++++ dlls/msi/tests/typelib.idl | 29 +++++++++++++++++++++++++++ 4 files changed, 95 insertions(+), 9 deletions(-) create mode 100644 dlls/msi/tests/rsrc.rc create mode 100644 dlls/msi/tests/typelib.idl
diff --git a/dlls/msi/tests/Makefile.in b/dlls/msi/tests/Makefile.in index 18a6457..5c7e81e 100644 --- a/dlls/msi/tests/Makefile.in +++ b/dlls/msi/tests/Makefile.in @@ -15,5 +15,7 @@ SOURCES = \ package.c \ patch.c \ record.c \ + rsrc.rc \ source.c \ - suminfo.c + suminfo.c \ + typelib.idl diff --git a/dlls/msi/tests/action.c b/dlls/msi/tests/action.c index ea8c0e8..1cf9e9e 100644 --- a/dlls/msi/tests/action.c +++ b/dlls/msi/tests/action.c @@ -23,6 +23,7 @@ #include <stdio.h> #include <stdlib.h>
+#define COBJMACROS #include <windows.h> #include <msiquery.h> #include <msidefs.h> @@ -36,6 +37,7 @@
#include "wine/test.h" #include "utils.h" +#include "typelib.h"
static UINT (WINAPI *pMsiQueryComponentStateA) (LPCSTR, LPCSTR, MSIINSTALLCONTEXT, LPCSTR, INSTALLSTATE *); @@ -1003,10 +1005,10 @@ static const char tl_install_exec_seq_dat[] = "InstallValidate\t\t1400\n" "InstallInitialize\t\t1500\n" "ProcessComponents\t\t1600\n" - "RemoveFiles\t\t1700\n" - "InstallFiles\t\t2000\n" - "RegisterTypeLibraries\tREGISTER_TYPELIB=1\t3000\n" "UnregisterTypeLibraries\t\t3100\n" + "RemoveFiles\t\t3200\n" + "InstallFiles\t\t3300\n" + "RegisterTypeLibraries\t\t3400\n" "RegisterProduct\t\t5100\n" "PublishFeatures\t\t5200\n" "PublishProduct\t\t5300\n" @@ -2647,6 +2649,24 @@ static DWORD get_estimated_size(void) return size; }
+static void extract_resource(const char *name, const char *type, const char *path) +{ + DWORD written; + HANDLE file; + HRSRC res; + void *ptr; + + file = CreateFileA(path, GENERIC_READ|GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, 0); + ok(file != INVALID_HANDLE_VALUE, "file creation failed, at %s, error %d\n", path, GetLastError()); + + res = FindResourceA(NULL, name, type); + ok( res != 0, "couldn't find resource\n" ); + ptr = LockResource( LoadResource( GetModuleHandleA(NULL), res )); + WriteFile( file, ptr, SizeofResource( GetModuleHandleA(NULL), res ), &written, NULL ); + ok( written == SizeofResource( GetModuleHandleA(NULL), res ), "couldn't write resource\n" ); + CloseHandle( file ); +} + static void test_register_product(void) { UINT r; @@ -5594,6 +5614,8 @@ error:
static void test_register_typelib(void) { + ITypeLib *tlb; + HRESULT hr; UINT r;
if (is_process_limited()) @@ -5602,26 +5624,37 @@ static void test_register_typelib(void) return; }
+ /* UnregisterTypeLibraries action fails in 64-bit Windows <= 7 */ + if (sizeof(void *) == 8) + { + win_skip("broken on 64-bit Windows\n"); + return; + } + create_test_files(); - create_file("msitest\typelib.dll", 1000); + extract_resource("typelib.tlb", "TYPELIB", "msitest\typelib.dll"); create_database(msifile, tl_tables, sizeof(tl_tables) / sizeof(msi_table));
MsiSetInternalUI(INSTALLUILEVEL_NONE, NULL);
- r = MsiInstallProductA(msifile, "REGISTER_TYPELIB=1"); + r = MsiInstallProductA(msifile, NULL); if (r == ERROR_INSTALL_PACKAGE_REJECTED) { skip("Not enough rights to perform tests\n"); goto error; } - ok(r == ERROR_INSTALL_FAILURE, "Expected ERROR_INSTALL_FAILURE, got %u\n", r); + ok(r == ERROR_SUCCESS, "got %u\n", r);
- r = MsiInstallProductA(msifile, NULL); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); + hr = LoadRegTypeLib(&LIBID_register_test, 7, 1, 0, &tlb); + ok(hr == S_OK, "got %#x\n", hr); + ITypeLib_Release(tlb);
r = MsiInstallProductA(msifile, "REMOVE=ALL"); ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
+ hr = LoadRegTypeLib(&LIBID_register_test, 7, 1, 0, &tlb); + ok(hr == TYPE_E_LIBNOTREGISTERED, "got %#x\n", hr); + ok(!delete_pf("msitest\typelib.dll", TRUE), "file not removed\n"); ok(!delete_pf("msitest", FALSE), "directory not removed\n");
diff --git a/dlls/msi/tests/rsrc.rc b/dlls/msi/tests/rsrc.rc new file mode 100644 index 0000000..eca1ae5 --- /dev/null +++ b/dlls/msi/tests/rsrc.rc @@ -0,0 +1,22 @@ +/* + * Copyright 2018 Zebediah Figura + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include "windef.h" + +/* @makedep: typelib.tlb */ +typelib.tlb TYPELIB typelib.tlb diff --git a/dlls/msi/tests/typelib.idl b/dlls/msi/tests/typelib.idl new file mode 100644 index 0000000..f447c60 --- /dev/null +++ b/dlls/msi/tests/typelib.idl @@ -0,0 +1,29 @@ +/* + * Copyright 2018 Zebediah Figura + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#pragma makedep ident +#pragma makedep typelib +#pragma makedep header + +[ + uuid(eac5166a-9734-4d91-878f-1dd02304c66c), + version(7.1) +] +library register_test +{ +}
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/msi/tests/Makefile.in | 2 +- dlls/msi/tests/action.c | 14 ++++++++++++++ dlls/msi/tests/custom.c | 29 +++++++++++++++++++++++++++++ dlls/msi/tests/custom.spec | 2 ++ 4 files changed, 46 insertions(+), 1 deletion(-)
diff --git a/dlls/msi/tests/Makefile.in b/dlls/msi/tests/Makefile.in index 5c7e81e..5f85d11 100644 --- a/dlls/msi/tests/Makefile.in +++ b/dlls/msi/tests/Makefile.in @@ -1,7 +1,7 @@ TESTDLL = msi.dll IMPORTS = cabinet msi shell32 ole32 oleaut32 user32 advapi32 version odbccp32
-custom_IMPORTS = uuid msi ole32 shell32 advapi32 odbccp32 +custom_IMPORTS = uuid msi ole32 shell32 advapi32 odbccp32 oleaut32
SOURCES = \ action.c \ diff --git a/dlls/msi/tests/action.c b/dlls/msi/tests/action.c index 1cf9e9e..306bfae 100644 --- a/dlls/msi/tests/action.c +++ b/dlls/msi/tests/action.c @@ -1006,14 +1006,27 @@ static const char tl_install_exec_seq_dat[] = "InstallInitialize\t\t1500\n" "ProcessComponents\t\t1600\n" "UnregisterTypeLibraries\t\t3100\n" + "ut_immediate\tREMOVE\t3101\n" + "ut_deferred\tREMOVE\t3102\n" "RemoveFiles\t\t3200\n" "InstallFiles\t\t3300\n" "RegisterTypeLibraries\t\t3400\n" + "rt_immediate\tNOT REMOVE\t3401\n" + "rt_deferred\tNOT REMOVE\t3402\n" "RegisterProduct\t\t5100\n" "PublishFeatures\t\t5200\n" "PublishProduct\t\t5300\n" "InstallFinalize\t\t6000\n";
+static const char tl_custom_action_dat[] = + "Action\tType\tSource\tTarget\n" + "s72\ti2\tS64\tS0\n" + "CustomAction\tAction\n" + "rt_immediate\t1\tcustom.dll\ttl_absent\n" + "rt_deferred\t1025\tcustom.dll\ttl_present\n" + "ut_immediate\t1\tcustom.dll\ttl_present\n" + "ut_deferred\t1025\tcustom.dll\ttl_absent\n"; + static const char crs_file_dat[] = "File\tComponent_\tFileName\tFileSize\tVersion\tLanguage\tAttributes\tSequence\n" "s72\ts72\tl255\ti4\tS72\tS20\tI2\ti2\n" @@ -2146,6 +2159,7 @@ static const msi_table tl_tables[] = ADD_TABLE(tl_file), ADD_TABLE(tl_typelib), ADD_TABLE(tl_install_exec_seq), + ADD_TABLE(tl_custom_action), ADD_TABLE(media), ADD_TABLE(property) }; diff --git a/dlls/msi/tests/custom.c b/dlls/msi/tests/custom.c index 7a3f01e..a3fcc65 100644 --- a/dlls/msi/tests/custom.c +++ b/dlls/msi/tests/custom.c @@ -1804,3 +1804,32 @@ todo_wine
return ERROR_SUCCESS; } + +static const GUID LIBID_register_test = + {0xeac5166a, 0x9734, 0x4d91, {0x87,0x8f, 0x1d,0xd0,0x23,0x04,0xc6,0x6c}}; + +UINT WINAPI tl_present(MSIHANDLE hinst) +{ + ITypeLib *tlb; + HRESULT hr; + + hr = LoadRegTypeLib(&LIBID_register_test, 7, 1, 0, &tlb); +todo_wine_if(!MsiGetMode(hinst, MSIRUNMODE_SCHEDULED)) + ok(hinst, hr == S_OK, "got %#x\n", hr); +if (tlb) + ITypeLib_Release(tlb); + + return ERROR_SUCCESS; +} + +UINT WINAPI tl_absent(MSIHANDLE hinst) +{ + ITypeLib *tlb; + HRESULT hr; + + hr = LoadRegTypeLib(&LIBID_register_test, 7, 1, 0, &tlb); +todo_wine_if(!MsiGetMode(hinst, MSIRUNMODE_SCHEDULED)) + ok(hinst, hr == TYPE_E_LIBNOTREGISTERED, "got %#x\n", hr); + + return ERROR_SUCCESS; +} diff --git a/dlls/msi/tests/custom.spec b/dlls/msi/tests/custom.spec index eec6a43..058a917 100644 --- a/dlls/msi/tests/custom.spec +++ b/dlls/msi/tests/custom.spec @@ -45,3 +45,5 @@ @ stdcall sis_absent(long) @ stdcall sss_started(long) @ stdcall sss_stopped(long) +@ stdcall tl_present(long) +@ stdcall tl_absent(long)
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/msi/tests/Makefile.in | 2 ++ dlls/msi/tests/action.c | 85 +++++++++++++++++++++++++++++---------------- dlls/msi/tests/selfreg.c | 38 ++++++++++++++++++++ dlls/msi/tests/selfreg.spec | 2 ++ 4 files changed, 98 insertions(+), 29 deletions(-) create mode 100644 dlls/msi/tests/selfreg.c create mode 100644 dlls/msi/tests/selfreg.spec
diff --git a/dlls/msi/tests/Makefile.in b/dlls/msi/tests/Makefile.in index 5f85d11..a0fdcae 100644 --- a/dlls/msi/tests/Makefile.in +++ b/dlls/msi/tests/Makefile.in @@ -16,6 +16,8 @@ SOURCES = \ patch.c \ record.c \ rsrc.rc \ + selfreg.c \ + selfreg.spec \ source.c \ suminfo.c \ typelib.idl diff --git a/dlls/msi/tests/action.c b/dlls/msi/tests/action.c index 306bfae..9dfa623 100644 --- a/dlls/msi/tests/action.c +++ b/dlls/msi/tests/action.c @@ -733,30 +733,55 @@ static const char cf_custom_action_dat[] = "rf_immediate\t1\tcustom.dll\tcf_present\n" "rf_deferred\t1025\tcustom.dll\tcf_absent\n";
+static const char sr_file_dat[] = + "File\tComponent_\tFileName\tFileSize\tVersion\tLanguage\tAttributes\tSequence\n" + "s72\ts72\tl255\ti4\tS72\tS20\tI2\ti2\n" + "File\tFile\n" + "selfreg.dll\tselfreg\tselfreg.dll\t1000\t\t\t8192\t1\n"; + +static const char sr_feature_dat[] = + "Feature\tFeature_Parent\tTitle\tDescription\tDisplay\tLevel\tDirectory_\tAttributes\n" + "s38\tS38\tL64\tL255\tI2\ti2\tS72\ti2\n" + "Feature\tFeature\n" + "selfreg\t\t\tselfreg feature\t1\t2\tMSITESTDIR\t0\n"; + +static const char sr_feature_comp_dat[] = + "Feature_\tComponent_\n" + "s38\ts72\n" + "FeatureComponents\tFeature_\tComponent_\n" + "selfreg\tselfreg\n"; + +static const char sr_component_dat[] = + "Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n" + "s72\tS38\ts72\ti2\tS255\tS72\n" + "Component\tComponent\n" + "selfreg\t{BB4C26FD-89D8-4E49-AF1C-DB4DCB5BF1B0}\tMSITESTDIR\t0\t\tselfreg.dll\n"; + static const char sr_selfreg_dat[] = "File_\tCost\n" "s72\tI2\n" "SelfReg\tFile_\n" - "one.txt\t1\n"; + "selfreg.dll\t\n";
static const char sr_install_exec_seq_dat[] = "Action\tCondition\tSequence\n" "s72\tS255\tI2\n" "InstallExecuteSequence\tAction\n" - "CostFinalize\t\t1000\n" "CostInitialize\t\t800\n" "FileCost\t\t900\n" - "ResolveSource\t\t950\n" - "MoveFiles\t\t1700\n" - "SelfUnregModules\t\t3900\n" - "InstallFiles\t\t4000\n" - "DuplicateFiles\t\t4500\n" - "WriteEnvironmentStrings\t\t4550\n" - "CreateShortcuts\t\t4600\n" - "InstallFinalize\t\t6600\n" - "InstallInitialize\t\t1500\n" + "CostFinalize\t\t1000\n" "InstallValidate\t\t1400\n" - "LaunchConditions\t\t100\n"; + "InstallInitialize\t\t1500\n" + "ProcessComponents\t\t1600\n" + "SelfUnregModules\t\t3800\n" + "RemoveFiles\t\t3900\n" + "InstallFiles\t\t4000\n" + "SelfRegModules\t\t4100\n" + "CreateShortcuts\t\t4600\n" + "RegisterProduct\t\t5100\n" + "PublishFeatures\t\t5200\n" + "PublishProduct\t\t5300\n" + "InstallFinalize\t\t6600\n";
static const char font_media_dat[] = "DiskId\tLastSequence\tDiskPrompt\tCabinet\tVolumeLabel\tSource\n" @@ -2096,11 +2121,11 @@ static const msi_table sis_tables[] =
static const msi_table sr_tables[] = { - ADD_TABLE(component), + ADD_TABLE(sr_component), ADD_TABLE(directory), - ADD_TABLE(feature), - ADD_TABLE(feature_comp), - ADD_TABLE(file), + ADD_TABLE(sr_feature), + ADD_TABLE(sr_feature_comp), + ADD_TABLE(sr_file), ADD_TABLE(sr_selfreg), ADD_TABLE(sr_install_exec_seq), ADD_TABLE(media), @@ -5395,6 +5420,7 @@ error:
static void test_self_registration(void) { + HKEY key; UINT r;
if (is_process_limited()) @@ -5404,6 +5430,7 @@ static void test_self_registration(void) }
create_test_files(); + extract_resource("selfreg.dll", "TESTDLL", "msitest\selfreg.dll"); create_database(msifile, sr_tables, sizeof(sr_tables) / sizeof(msi_table));
MsiSetInternalUI(INSTALLUILEVEL_NONE, NULL); @@ -5416,21 +5443,21 @@ static void test_self_registration(void) } ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
- ok(delete_pf("msitest\cabout\new\five.txt", TRUE), "File not installed\n"); - ok(delete_pf("msitest\cabout\new", FALSE), "Directory not created\n"); - ok(delete_pf("msitest\cabout\four.txt", TRUE), "File not installed\n"); - ok(delete_pf("msitest\cabout", FALSE), "Directory not created\n"); - ok(delete_pf("msitest\changed\three.txt", TRUE), "File not installed\n"); - ok(delete_pf("msitest\changed", FALSE), "Directory not created\n"); - ok(delete_pf("msitest\first\two.txt", TRUE), "File not installed\n"); - ok(delete_pf("msitest\first", FALSE), "Directory not created\n"); - ok(delete_pf("msitest\filename", TRUE), "File not installed\n"); - ok(delete_pf("msitest\one.txt", TRUE), "File not installed\n"); - ok(delete_pf("msitest\service.exe", TRUE), "File not installed\n"); - ok(delete_pf("msitest\service2.exe", TRUE), "File not installed\n"); - ok(delete_pf("msitest", FALSE), "Directory not created\n"); + r = RegOpenKeyA(HKEY_CLASSES_ROOT, "selfreg_test", &key); + ok(!r, "got %u\n", r); + RegCloseKey(key); + + r = MsiInstallProductA(msifile, "REMOVE=ALL"); + ok(!r, "got %u\n", r); + + r = RegOpenKeyA(HKEY_CLASSES_ROOT, "selfreg_test", &key); + ok(r == ERROR_FILE_NOT_FOUND, "got %u\n", r); + + ok(!delete_pf("msitest\selfreg.dll", TRUE), "file not removed\n"); + ok(!delete_pf("msitest", FALSE), "directory not removed\n");
error: + DeleteFileA("msitest\selfreg.dll"); delete_test_files(); DeleteFileA(msifile); } diff --git a/dlls/msi/tests/selfreg.c b/dlls/msi/tests/selfreg.c new file mode 100644 index 0000000..668e742 --- /dev/null +++ b/dlls/msi/tests/selfreg.c @@ -0,0 +1,38 @@ +/* + * DLL for testing self-registration + * + * Copyright 2018 Zebediah Figura + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include <stdarg.h> +#include <windef.h> +#include <winbase.h> +#include <winreg.h> + +HRESULT WINAPI DllRegisterServer(void) +{ + HKEY key; + RegCreateKeyA(HKEY_CLASSES_ROOT, "selfreg_test", &key); + RegCloseKey(key); + return S_OK; +} + +HRESULT WINAPI DllUnregisterServer(void) +{ + RegDeleteKeyA(HKEY_CLASSES_ROOT, "selfreg_test"); + return S_OK; +} diff --git a/dlls/msi/tests/selfreg.spec b/dlls/msi/tests/selfreg.spec new file mode 100644 index 0000000..0f9b073 --- /dev/null +++ b/dlls/msi/tests/selfreg.spec @@ -0,0 +1,2 @@ +@ stdcall -private DllRegisterServer() +@ stdcall -private DllUnregisterServer()
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/msi/tests/action.c | 14 ++++++++++++++ dlls/msi/tests/custom.c | 25 +++++++++++++++++++++++++ dlls/msi/tests/custom.spec | 2 ++ 3 files changed, 41 insertions(+)
diff --git a/dlls/msi/tests/action.c b/dlls/msi/tests/action.c index 9dfa623..ac94c38 100644 --- a/dlls/msi/tests/action.c +++ b/dlls/msi/tests/action.c @@ -774,15 +774,28 @@ static const char sr_install_exec_seq_dat[] = "InstallInitialize\t\t1500\n" "ProcessComponents\t\t1600\n" "SelfUnregModules\t\t3800\n" + "su_immediate\tREMOVE\t3801\n" + "su_deferred\tREMOVE\t3802\n" "RemoveFiles\t\t3900\n" "InstallFiles\t\t4000\n" "SelfRegModules\t\t4100\n" + "sr_immediate\tNOT REMOVE\t4101\n" + "sr_deferred\tNOT REMOVE\t4102\n" "CreateShortcuts\t\t4600\n" "RegisterProduct\t\t5100\n" "PublishFeatures\t\t5200\n" "PublishProduct\t\t5300\n" "InstallFinalize\t\t6600\n";
+static const char sr_custom_action_dat[] = + "Action\tType\tSource\tTarget\n" + "s72\ti2\tS64\tS0\n" + "CustomAction\tAction\n" + "sr_immediate\t1\tcustom.dll\tsr_absent\n" + "sr_deferred\t1025\tcustom.dll\tsr_present\n" + "su_immediate\t1\tcustom.dll\tsr_present\n" + "su_deferred\t1025\tcustom.dll\tsr_absent\n"; + static const char font_media_dat[] = "DiskId\tLastSequence\tDiskPrompt\tCabinet\tVolumeLabel\tSource\n" "i2\ti4\tL64\tS255\tS32\tS72\n" @@ -2128,6 +2141,7 @@ static const msi_table sr_tables[] = ADD_TABLE(sr_file), ADD_TABLE(sr_selfreg), ADD_TABLE(sr_install_exec_seq), + ADD_TABLE(sr_custom_action), ADD_TABLE(media), ADD_TABLE(property) }; diff --git a/dlls/msi/tests/custom.c b/dlls/msi/tests/custom.c index a3fcc65..bb5ece6 100644 --- a/dlls/msi/tests/custom.c +++ b/dlls/msi/tests/custom.c @@ -1833,3 +1833,28 @@ todo_wine_if(!MsiGetMode(hinst, MSIRUNMODE_SCHEDULED))
return ERROR_SUCCESS; } + +UINT WINAPI sr_present(MSIHANDLE hinst) +{ + HKEY key; + LONG res; + + res = RegOpenKeyA(HKEY_CLASSES_ROOT, "selfreg_test", &key); +todo_wine_if(!MsiGetMode(hinst, MSIRUNMODE_SCHEDULED)) + ok(hinst, !res, "got %u\n", res); + RegCloseKey(key); + + return ERROR_SUCCESS; +} + +UINT WINAPI sr_absent(MSIHANDLE hinst) +{ + HKEY key; + LONG res; + + res = RegOpenKeyA(HKEY_CLASSES_ROOT, "selfreg_test", &key); +todo_wine_if(!MsiGetMode(hinst, MSIRUNMODE_SCHEDULED)) + ok(hinst, res == ERROR_FILE_NOT_FOUND, "got %u\n", res); + + return ERROR_SUCCESS; +} diff --git a/dlls/msi/tests/custom.spec b/dlls/msi/tests/custom.spec index 058a917..2ec5b6c 100644 --- a/dlls/msi/tests/custom.spec +++ b/dlls/msi/tests/custom.spec @@ -43,6 +43,8 @@ @ stdcall sds_absent(long) @ stdcall sis_present(long) @ stdcall sis_absent(long) +@ stdcall sr_present(long) +@ stdcall sr_absent(long) @ stdcall sss_started(long) @ stdcall sss_stopped(long) @ stdcall tl_present(long)
Hi,
While running your changed tests on Windows, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check? Full results can be found at https://testbot.winehq.org/JobDetails.pl?Key=38810
Your paranoid android.
=== w864 (32 bit install) === install.c:2510: Test failed: Directory not created
=== w7u (32 bit action) === action.c:4177: Test failed: Expected 20180529, got 20180530
Hi,
While running your changed tests on Windows, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check? Full results can be found at https://testbot.winehq.org/JobDetails.pl?Key=38807
Your paranoid android.
=== w7u (32 bit install) === The task timed out
=== w864 (32 bit install) === install.c:2510: Test failed: Directory not created
=== w7u (32 bit msi) === The task timed out