msi: Don't skip files continued from a previous cabinet.
This commit is contained in:
parent
3ea059c9d7
commit
5b8282120a
|
@ -716,7 +716,7 @@ UINT ACTION_InstallFiles(MSIPACKAGE *package)
|
||||||
|
|
||||||
LIST_FOR_EACH_ENTRY( file, &package->files, MSIFILE, entry )
|
LIST_FOR_EACH_ENTRY( file, &package->files, MSIFILE, entry )
|
||||||
{
|
{
|
||||||
if (file->state != msifs_missing && file->state != msifs_overwrite)
|
if (file->state != msifs_missing && !mi->is_continuous && file->state != msifs_overwrite)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (file->Sequence > mi->last_sequence || mi->is_continuous ||
|
if (file->Sequence > mi->last_sequence || mi->is_continuous ||
|
||||||
|
|
|
@ -214,6 +214,13 @@ static const CHAR mm_media_dat[] = "DiskId\tLastSequence\tDiskPrompt\tCabinet\tV
|
||||||
"Media\tDiskId\n"
|
"Media\tDiskId\n"
|
||||||
"1\t3\t\ttest1.cab\tDISK1\t\n";
|
"1\t3\t\ttest1.cab\tDISK1\t\n";
|
||||||
|
|
||||||
|
static const CHAR ss_media_dat[] = "DiskId\tLastSequence\tDiskPrompt\tCabinet\tVolumeLabel\tSource\n"
|
||||||
|
"i2\ti4\tL64\tS255\tS32\tS72\n"
|
||||||
|
"Media\tDiskId\n"
|
||||||
|
"1\t2\t\ttest1.cab\tDISK1\t\n"
|
||||||
|
"2\t2\t\ttest2.cab\tDISK2\t\n"
|
||||||
|
"3\t12\t\ttest3.cab\tDISK3\t\n";
|
||||||
|
|
||||||
typedef struct _msi_table
|
typedef struct _msi_table
|
||||||
{
|
{
|
||||||
const CHAR *filename;
|
const CHAR *filename;
|
||||||
|
@ -286,6 +293,18 @@ static const msi_table mm_tables[] =
|
||||||
ADD_TABLE(property),
|
ADD_TABLE(property),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const msi_table ss_tables[] =
|
||||||
|
{
|
||||||
|
ADD_TABLE(cc_component),
|
||||||
|
ADD_TABLE(directory),
|
||||||
|
ADD_TABLE(cc_feature),
|
||||||
|
ADD_TABLE(cc_feature_comp),
|
||||||
|
ADD_TABLE(cc_file),
|
||||||
|
ADD_TABLE(install_exec_seq),
|
||||||
|
ADD_TABLE(ss_media),
|
||||||
|
ADD_TABLE(property),
|
||||||
|
};
|
||||||
|
|
||||||
/* cabinet definitions */
|
/* cabinet definitions */
|
||||||
|
|
||||||
/* make the max size large so there is only one cab file */
|
/* make the max size large so there is only one cab file */
|
||||||
|
@ -1021,6 +1040,29 @@ static void test_mixedmedia(void)
|
||||||
DeleteFile(msifile);
|
DeleteFile(msifile);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void test_samesequence(void)
|
||||||
|
{
|
||||||
|
UINT r;
|
||||||
|
|
||||||
|
create_cc_test_files();
|
||||||
|
create_database(msifile, ss_tables, sizeof(ss_tables) / sizeof(msi_table));
|
||||||
|
|
||||||
|
MsiSetInternalUI(INSTALLUILEVEL_NONE, NULL);
|
||||||
|
|
||||||
|
r = MsiInstallProductA(msifile, NULL);
|
||||||
|
todo_wine
|
||||||
|
{
|
||||||
|
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
|
||||||
|
ok(delete_pf("msitest\\augustus", TRUE), "File not installed\n");
|
||||||
|
ok(delete_pf("msitest\\caesar", TRUE), "File not installed\n");
|
||||||
|
}
|
||||||
|
ok(delete_pf("msitest\\maximus", TRUE), "File not installed\n");
|
||||||
|
ok(delete_pf("msitest", FALSE), "File not installed\n");
|
||||||
|
|
||||||
|
delete_cab_files();
|
||||||
|
DeleteFile(msifile);
|
||||||
|
}
|
||||||
|
|
||||||
START_TEST(install)
|
START_TEST(install)
|
||||||
{
|
{
|
||||||
DWORD len;
|
DWORD len;
|
||||||
|
@ -1044,6 +1086,7 @@ START_TEST(install)
|
||||||
test_continuouscabs();
|
test_continuouscabs();
|
||||||
test_caborder();
|
test_caborder();
|
||||||
test_mixedmedia();
|
test_mixedmedia();
|
||||||
|
test_samesequence();
|
||||||
|
|
||||||
SetCurrentDirectoryA(prev_path);
|
SetCurrentDirectoryA(prev_path);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue