From 477702c829ed480d6a48432a1952d641f639aaa3 Mon Sep 17 00:00:00 2001 From: David Hedberg Date: Thu, 10 Mar 2011 02:20:57 +0100 Subject: [PATCH] msi: Check other sources if install media not present at last used location. --- dlls/msi/media.c | 45 +++++++++++++++++++++++++++++++++------------ 1 file changed, 33 insertions(+), 12 deletions(-) diff --git a/dlls/msi/media.c b/dlls/msi/media.c index 8c4b0f71929..37d353017e1 100644 --- a/dlls/msi/media.c +++ b/dlls/msi/media.c @@ -748,23 +748,44 @@ static UINT find_published_source(MSIPACKAGE *package, MSIMEDIAINFO *mi) if (r != ERROR_SUCCESS) return r; - index = 0; - volumesz = MAX_PATH; - promptsz = MAX_PATH; - if (last_type[0] == 'n') { - while (MsiSourceListEnumSourcesW(package->ProductCode, NULL, - package->Context, - MSISOURCETYPE_NETWORK, index++, - volume, &volumesz) == ERROR_SUCCESS) + WCHAR cabinet_file[MAX_PATH]; + BOOL check_all = FALSE; + + while(TRUE) { - if (!strncmpiW(source, volume, strlenW(source))) + index = 0; + volumesz = MAX_PATH; + while (MsiSourceListEnumSourcesW(package->ProductCode, NULL, + package->Context, + MSISOURCETYPE_NETWORK, index++, + volume, &volumesz) == ERROR_SUCCESS) { - lstrcpyW(mi->sourcedir, source); - TRACE("Found network source %s\n", debugstr_w(mi->sourcedir)); - return ERROR_SUCCESS; + if (check_all || !strncmpiW(source, volume, strlenW(source))) + { + lstrcpyW(cabinet_file, volume); + PathAddBackslashW(cabinet_file); + lstrcatW(cabinet_file, mi->cabinet); + + if (GetFileAttributesW(cabinet_file) == INVALID_FILE_ATTRIBUTES) + { + volumesz = MAX_PATH; + if(!check_all) + break; + continue; + } + + lstrcpyW(mi->sourcedir, volume); + TRACE("Found network source %s\n", debugstr_w(mi->sourcedir)); + return ERROR_SUCCESS; + } } + + if (!check_all) + check_all = TRUE; + else + break; } } -- 2.11.4.GIT