diff --git a/dlls/msi/files.c b/dlls/msi/files.c index 1f6187356e1..4d8c502a910 100644 --- a/dlls/msi/files.c +++ b/dlls/msi/files.c @@ -302,7 +302,7 @@ UINT ACTION_InstallFiles(MSIPACKAGE *package) LIST_FOR_EACH_ENTRY( file, &package->files, MSIFILE, entry ) { - rc = msi_load_media_info( package, file, mi ); + rc = msi_load_media_info( package, file->Sequence, mi ); if (rc != ERROR_SUCCESS) { ERR("Unable to load media info for %s (%u)\n", debugstr_w(file->File), rc); @@ -310,7 +310,8 @@ UINT ACTION_InstallFiles(MSIPACKAGE *package) } if (!file->Component->Enabled) continue; - if (file->state != msifs_hashmatch && (rc = ready_media( package, file, mi ))) + if (file->state != msifs_hashmatch && + (rc = ready_media( package, file->Sequence, file->IsCompressed, mi ))) { ERR("Failed to ready media for %s\n", debugstr_w(file->File)); goto done; diff --git a/dlls/msi/media.c b/dlls/msi/media.c index 37d353017e1..7cf758551a4 100644 --- a/dlls/msi/media.c +++ b/dlls/msi/media.c @@ -656,7 +656,7 @@ static UINT get_drive_type(const WCHAR *path) return GetDriveTypeW(root); } -UINT msi_load_media_info(MSIPACKAGE *package, MSIFILE *file, MSIMEDIAINFO *mi) +UINT msi_load_media_info(MSIPACKAGE *package, UINT Sequence, MSIMEDIAINFO *mi) { MSIRECORD *row; LPWSTR source_dir; @@ -669,7 +669,7 @@ UINT msi_load_media_info(MSIPACKAGE *package, MSIFILE *file, MSIMEDIAINFO *mi) '`','L','a','s','t','S','e','q','u','e','n','c','e','`',' ','>','=',' ','%','i', ' ','O','R','D','E','R',' ','B','Y',' ','`','D','i','s','k','I','d','`',0}; - row = MSI_QueryGetRecord(package->db, query, file->Sequence); + row = MSI_QueryGetRecord(package->db, query, Sequence); if (!row) { TRACE("Unable to query row\n"); @@ -815,7 +815,7 @@ static UINT find_published_source(MSIPACKAGE *package, MSIMEDIAINFO *mi) return ERROR_FUNCTION_FAILED; } -UINT ready_media(MSIPACKAGE *package, MSIFILE *file, MSIMEDIAINFO *mi) +UINT ready_media(MSIPACKAGE *package, UINT Sequence, BOOL IsCompressed, MSIMEDIAINFO *mi) { UINT rc = ERROR_SUCCESS; WCHAR *cabinet_file; @@ -831,7 +831,7 @@ UINT ready_media(MSIPACKAGE *package, MSIFILE *file, MSIMEDIAINFO *mi) cabinet_file = get_cabinet_filename(mi); /* package should be downloaded */ - if (file->IsCompressed && + if (IsCompressed && GetFileAttributesW(cabinet_file) == INVALID_FILE_ATTRIBUTES && package->BaseURL && UrlIsW(package->BaseURL, URLIS_URL)) { @@ -874,7 +874,7 @@ UINT ready_media(MSIPACKAGE *package, MSIFILE *file, MSIMEDIAINFO *mi) } } - if (file->IsCompressed && + if (IsCompressed && GetFileAttributesW(cabinet_file) == INVALID_FILE_ATTRIBUTES) { rc = find_published_source(package, mi); diff --git a/dlls/msi/msipriv.h b/dlls/msi/msipriv.h index 1a0bee0fdb0..266c25e41ef 100644 --- a/dlls/msi/msipriv.h +++ b/dlls/msi/msipriv.h @@ -990,8 +990,8 @@ typedef struct PVOID user; } MSICABDATA; -extern UINT ready_media(MSIPACKAGE *package, MSIFILE *file, MSIMEDIAINFO *mi); -extern UINT msi_load_media_info(MSIPACKAGE *package, MSIFILE *file, MSIMEDIAINFO *mi); +extern UINT ready_media(MSIPACKAGE *package, UINT Sequence, BOOL IsCompressed, MSIMEDIAINFO *mi); +extern UINT msi_load_media_info(MSIPACKAGE *package, UINT Sequence, MSIMEDIAINFO *mi); extern void msi_free_media_info(MSIMEDIAINFO *mi); extern BOOL msi_cabextract(MSIPACKAGE* package, MSIMEDIAINFO *mi, LPVOID data);