Commit 08443b3b authored by James Hawkins's avatar James Hawkins Committed by Alexandre Julliard

msi: PackagePath must also include the package name.

parent 56129f25
...@@ -629,35 +629,43 @@ UINT MSI_InstallPackage( MSIPACKAGE *package, LPCWSTR szPackagePath, ...@@ -629,35 +629,43 @@ UINT MSI_InstallPackage( MSIPACKAGE *package, LPCWSTR szPackagePath,
if (szPackagePath) if (szPackagePath)
{ {
LPWSTR p, check, path; LPWSTR p, check, dir;
path = strdupW(szPackagePath); dir = strdupW(szPackagePath);
p = strrchrW(path,'\\'); p = strrchrW(dir, '\\');
if (p) if (p)
*(++p) = 0;
else
{ {
p++; msi_free(dir);
*p=0; dir = msi_alloc(MAX_PATH*sizeof(WCHAR));
GetCurrentDirectoryW(MAX_PATH, dir);
lstrcatW(dir, cszbs);
p = (LPWSTR)szPackagePath;
} }
else
msi_free( package->PackagePath );
package->PackagePath = msi_alloc((lstrlenW(dir) + lstrlenW(p) + 2) * sizeof(WCHAR));
if (!package->PackagePath)
{ {
msi_free(path); msi_free(dir);
path = msi_alloc(MAX_PATH*sizeof(WCHAR)); return ERROR_OUTOFMEMORY;
GetCurrentDirectoryW(MAX_PATH,path);
strcatW(path,cszbs);
} }
lstrcpyW(package->PackagePath, dir);
lstrcatW(package->PackagePath, cszbs);
lstrcatW(package->PackagePath, p);
check = msi_dup_property( package, cszSourceDir ); check = msi_dup_property( package, cszSourceDir );
if (!check) if (!check)
MSI_SetPropertyW(package, cszSourceDir, path); MSI_SetPropertyW(package, cszSourceDir, dir);
msi_free(check); msi_free(check);
check = msi_dup_property( package, cszSOURCEDIR ); check = msi_dup_property( package, cszSOURCEDIR );
if (!check) if (!check)
MSI_SetPropertyW(package, cszSOURCEDIR, path); MSI_SetPropertyW(package, cszSOURCEDIR, dir);
msi_free( package->PackagePath );
package->PackagePath = path;
msi_free(dir);
msi_free(check); msi_free(check);
} }
......
...@@ -2244,11 +2244,8 @@ static void test_publishsourcelist(void) ...@@ -2244,11 +2244,8 @@ static void test_publishsourcelist(void)
r = MsiSourceListGetInfoA(prodcode, NULL, MSIINSTALLCONTEXT_USERUNMANAGED, r = MsiSourceListGetInfoA(prodcode, NULL, MSIINSTALLCONTEXT_USERUNMANAGED,
MSICODE_PRODUCT, INSTALLPROPERTY_PACKAGENAME, value, &size); MSICODE_PRODUCT, INSTALLPROPERTY_PACKAGENAME, value, &size);
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
todo_wine ok(!lstrcmpA(value, "msitest.msi"), "Expected 'msitest.msi', got %s\n", value);
{ ok(size == 11, "Expected 11, got %d\n", size);
ok(!lstrcmpA(value, "msitest.msi"), "Expected 'msitest.msi', got %s\n", value);
ok(size == 11, "Expected 11, got %d\n", size);
}
/* complete uninstall */ /* complete uninstall */
r = MsiInstallProductA(msifile, "FULL=1 REMOVE=ALL"); r = MsiInstallProductA(msifile, "FULL=1 REMOVE=ALL");
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment