msi: Check other sources if install media not present at last used location.
This commit is contained in:
parent
599b30833a
commit
477702c829
|
@ -748,23 +748,44 @@ static UINT find_published_source(MSIPACKAGE *package, MSIMEDIAINFO *mi)
|
||||||
if (r != ERROR_SUCCESS)
|
if (r != ERROR_SUCCESS)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
index = 0;
|
|
||||||
volumesz = MAX_PATH;
|
|
||||||
promptsz = MAX_PATH;
|
|
||||||
|
|
||||||
if (last_type[0] == 'n')
|
if (last_type[0] == 'n')
|
||||||
{
|
{
|
||||||
while (MsiSourceListEnumSourcesW(package->ProductCode, NULL,
|
WCHAR cabinet_file[MAX_PATH];
|
||||||
package->Context,
|
BOOL check_all = FALSE;
|
||||||
MSISOURCETYPE_NETWORK, index++,
|
|
||||||
volume, &volumesz) == ERROR_SUCCESS)
|
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);
|
if (check_all || !strncmpiW(source, volume, strlenW(source)))
|
||||||
TRACE("Found network source %s\n", debugstr_w(mi->sourcedir));
|
{
|
||||||
return ERROR_SUCCESS;
|
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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue