Actually start on an implemention for MsiGetComponentPathW that should
handle all keypaths that are files.
This commit is contained in:
parent
0e18914481
commit
0de5671ee9
|
@ -1259,7 +1259,7 @@ INSTALLSTATE WINAPI MsiGetComponentPathA(LPCSTR szProduct, LPCSTR szComponent,
|
||||||
LPSTR lpPathBuf, DWORD* pcchBuf)
|
LPSTR lpPathBuf, DWORD* pcchBuf)
|
||||||
{
|
{
|
||||||
INSTALLSTATE rc;
|
INSTALLSTATE rc;
|
||||||
UINT len;
|
UINT len,incoming_len;
|
||||||
LPWSTR szwProduct= NULL;
|
LPWSTR szwProduct= NULL;
|
||||||
LPWSTR szwComponent= NULL;
|
LPWSTR szwComponent= NULL;
|
||||||
LPWSTR lpwPathBuf= NULL;
|
LPWSTR lpwPathBuf= NULL;
|
||||||
|
@ -1290,14 +1290,15 @@ INSTALLSTATE WINAPI MsiGetComponentPathA(LPCSTR szProduct, LPCSTR szComponent,
|
||||||
else
|
else
|
||||||
lpwPathBuf = NULL;
|
lpwPathBuf = NULL;
|
||||||
|
|
||||||
|
incoming_len = *pcchBuf;
|
||||||
rc = MsiGetComponentPathW(szwProduct, szwComponent, lpwPathBuf, pcchBuf);
|
rc = MsiGetComponentPathW(szwProduct, szwComponent, lpwPathBuf, pcchBuf);
|
||||||
|
|
||||||
HeapFree( GetProcessHeap(), 0, szwProduct);
|
HeapFree( GetProcessHeap(), 0, szwProduct);
|
||||||
HeapFree( GetProcessHeap(), 0, szwComponent);
|
HeapFree( GetProcessHeap(), 0, szwComponent);
|
||||||
if (lpwPathBuf)
|
if (lpwPathBuf)
|
||||||
{
|
{
|
||||||
WideCharToMultiByte(CP_ACP, 0, lpwPathBuf, *pcchBuf,
|
WideCharToMultiByte(CP_ACP, 0, lpwPathBuf, incoming_len,
|
||||||
lpPathBuf, GUID_SIZE, NULL, NULL);
|
lpPathBuf, incoming_len, NULL, NULL);
|
||||||
HeapFree( GetProcessHeap(), 0, lpwPathBuf);
|
HeapFree( GetProcessHeap(), 0, lpwPathBuf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1307,10 +1308,58 @@ INSTALLSTATE WINAPI MsiGetComponentPathA(LPCSTR szProduct, LPCSTR szComponent,
|
||||||
INSTALLSTATE WINAPI MsiGetComponentPathW(LPCWSTR szProduct, LPCWSTR szComponent,
|
INSTALLSTATE WINAPI MsiGetComponentPathW(LPCWSTR szProduct, LPCWSTR szComponent,
|
||||||
LPWSTR lpPathBuf, DWORD* pcchBuf)
|
LPWSTR lpPathBuf, DWORD* pcchBuf)
|
||||||
{
|
{
|
||||||
FIXME("STUB: (%s %s %p %p)\n", debugstr_w(szProduct),
|
WCHAR squished_pc[0x100];
|
||||||
|
WCHAR squished_cc[0x100];
|
||||||
|
UINT rc;
|
||||||
|
INSTALLSTATE rrc = INSTALLSTATE_ABSENT;
|
||||||
|
HKEY hkey=0,hkey2=0,hkey3=0;
|
||||||
|
static const WCHAR szInstaller[] = {
|
||||||
|
'S','o','f','t','w','a','r','e','\\',
|
||||||
|
'M','i','c','r','o','s','o','f','t','\\',
|
||||||
|
'W','i','n','d','o','w','s','\\',
|
||||||
|
'C','u','r','r','e','n','t','V','e','r','s','i','o','n','\\',
|
||||||
|
'I','n','s','t','a','l','l','e','r',0 };
|
||||||
|
static const WCHAR szComponents[] = {
|
||||||
|
'C','o','m','p','o','n','e','n','t','s',0 };
|
||||||
|
|
||||||
|
TRACE("(%s %s %p %p)\n", debugstr_w(szProduct),
|
||||||
debugstr_w(szComponent), lpPathBuf, pcchBuf);
|
debugstr_w(szComponent), lpPathBuf, pcchBuf);
|
||||||
|
|
||||||
return INSTALLSTATE_UNKNOWN;
|
squash_guid(szProduct,squished_pc);
|
||||||
|
squash_guid(szComponent,squished_cc);
|
||||||
|
|
||||||
|
rc = RegOpenKeyW(HKEY_LOCAL_MACHINE,szInstaller,&hkey);
|
||||||
|
if (rc != ERROR_SUCCESS)
|
||||||
|
goto end;
|
||||||
|
|
||||||
|
rc = RegOpenKeyW(hkey,szComponents,&hkey2);
|
||||||
|
if (rc != ERROR_SUCCESS)
|
||||||
|
goto end;
|
||||||
|
|
||||||
|
rc = RegOpenKeyW(hkey2,squished_cc,&hkey3);
|
||||||
|
if (rc != ERROR_SUCCESS)
|
||||||
|
goto end;
|
||||||
|
|
||||||
|
*pcchBuf *= sizeof(WCHAR);
|
||||||
|
rc = RegQueryValueExW(hkey3,squished_pc,NULL,NULL,(LPVOID)lpPathBuf,
|
||||||
|
pcchBuf);
|
||||||
|
*pcchBuf /= sizeof(WCHAR);
|
||||||
|
|
||||||
|
if (rc!= ERROR_SUCCESS)
|
||||||
|
goto end;
|
||||||
|
|
||||||
|
TRACE("found path of (%s:%s)(%s)\n", debugstr_w(squished_cc),
|
||||||
|
debugstr_w(squished_pc), debugstr_w(lpPathBuf));
|
||||||
|
|
||||||
|
FIXME("Only working for installed files, not registry keys\n");
|
||||||
|
if (GetFileAttributesW(lpPathBuf) != INVALID_FILE_ATTRIBUTES)
|
||||||
|
rrc = INSTALLSTATE_LOCAL;
|
||||||
|
|
||||||
|
end:
|
||||||
|
RegCloseKey(hkey3);
|
||||||
|
RegCloseKey(hkey2);
|
||||||
|
RegCloseKey(hkey);
|
||||||
|
return rrc;
|
||||||
}
|
}
|
||||||
|
|
||||||
INSTALLSTATE WINAPI MsiQueryFeatureStateA(LPCSTR szProduct, LPCSTR szFeature)
|
INSTALLSTATE WINAPI MsiQueryFeatureStateA(LPCSTR szProduct, LPCSTR szFeature)
|
||||||
|
|
Loading…
Reference in New Issue