From 259557038c161dc7dcb1ee03ee50d2199969bb94 Mon Sep 17 00:00:00 2001 From: Aric Stewart Date: Wed, 22 Dec 2004 17:13:26 +0000 Subject: [PATCH] Fix folder resolution. --- dlls/msi/action.c | 2 +- dlls/msi/package.c | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/dlls/msi/action.c b/dlls/msi/action.c index 54c0d4be48d..dd844936047 100644 --- a/dlls/msi/action.c +++ b/dlls/msi/action.c @@ -281,7 +281,7 @@ static LPWSTR PACKAGE_GetProperty(MSIPACKAGE *package, LPCWSTR prop) UINT r; r = MSI_GetPropertyW(package, prop, NULL, &sz); - if (r != ERROR_SUCCESS) + if (r != ERROR_SUCCESS && r != ERROR_MORE_DATA) return NULL; sz++; str = HeapAlloc(GetProcessHeap(),0,sz*sizeof(WCHAR)); diff --git a/dlls/msi/package.c b/dlls/msi/package.c index 35abed6d735..6a3fa9ff0ef 100644 --- a/dlls/msi/package.c +++ b/dlls/msi/package.c @@ -169,6 +169,7 @@ http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/prope static VOID set_installer_properties(MSIPACKAGE *package) { WCHAR pth[MAX_PATH]; + WCHAR *ptr; OSVERSIONINFOA OSVersion; DWORD verval; WCHAR verstr[10], msiver[10]; @@ -210,6 +211,8 @@ static VOID set_installer_properties(MSIPACKAGE *package) {'P','e','r','s','o','n','a','l','F','o','l','d','e','r',0}; static const WCHAR WF[] = {'W','i','n','d','o','w','s','F','o','l','d','e','r',0}; + static const WCHAR WV[] = +{'W','i','n','d','o','w','s','V','o','l','u','m','e',0}; static const WCHAR TF[]= {'T','e','m','p','F','o','l','d','e','r',0}; static const WCHAR szAdminUser[] = @@ -332,6 +335,12 @@ Privileged strcatW(pth,cszbs); MSI_SetPropertyW(package, WF, pth); + SHGetFolderPathW(NULL,CSIDL_WINDOWS,NULL,0,pth); + ptr = strchrW(pth,'\\'); + if (ptr) + *ptr = 0; + MSI_SetPropertyW(package, WV, pth); + GetTempPathW(MAX_PATH,pth); MSI_SetPropertyW(package, TF, pth); @@ -768,6 +777,9 @@ UINT MSI_GetPropertyW(MSIPACKAGE *package, LPCWSTR szName, if (rc == ERROR_SUCCESS) TRACE("returning %s for property %s\n", debugstr_w(szValueBuf), debugstr_w(szName)); + else if (rc == ERROR_MORE_DATA) + TRACE("need %i sized buffer for %s\n", *pchValueBuf, + debugstr_w(szName)); else { *pchValueBuf = 0;