From 42e6988891a66a66c3b9b6097eb8919609ec8b4e Mon Sep 17 00:00:00 2001 From: Vincent Povirk Date: Fri, 1 Oct 2010 14:18:12 -0500 Subject: [PATCH 04/20] mscoree: Use the new search methods for GetCORVersion/GetCORSystemDirectory. --- dlls/mscoree/mscoree_main.c | 72 ++++++++++++----------------------------- dlls/mscoree/tests/mscoree.c | 8 +++++ 2 files changed, 29 insertions(+), 51 deletions(-) diff --git a/dlls/mscoree/mscoree_main.c b/dlls/mscoree/mscoree_main.c index a57d766..cb55d63 100644 --- a/dlls/mscoree/mscoree_main.c +++ b/dlls/mscoree/mscoree_main.c @@ -186,28 +186,6 @@ static BOOL get_mono_path(LPWSTR path) return get_mono_path_from_registry(path); } -static BOOL get_install_root(LPWSTR install_dir) -{ - const WCHAR dotnet_key[] = {'S','O','F','T','W','A','R','E','\\','M','i','c','r','o','s','o','f','t','\\','.','N','E','T','F','r','a','m','e','w','o','r','k','\\',0}; - const WCHAR install_root[] = {'I','n','s','t','a','l','l','R','o','o','t',0}; - - DWORD len; - HKEY key; - - if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, dotnet_key, 0, KEY_READ, &key)) - return FALSE; - - len = MAX_PATH; - if (RegQueryValueExW(key, install_root, 0, NULL, (LPBYTE)install_dir, &len)) - { - RegCloseKey(key); - return FALSE; - } - RegCloseKey(key); - - return TRUE; -} - static CRITICAL_SECTION mono_lib_cs; static CRITICAL_SECTION_DEBUG mono_lib_cs_debug = { @@ -460,56 +438,48 @@ HRESULT WINAPI _CorValidateImage(PVOID* imageBase, LPCWSTR imageName) HRESULT WINAPI GetCORSystemDirectory(LPWSTR pbuffer, DWORD cchBuffer, DWORD *dwLength) { - static const WCHAR slash[] = {'\\',0}; - WCHAR system_dir[MAX_PATH]; - WCHAR version[MAX_PATH]; + ICLRRuntimeInfo *info; + HRESULT ret; - FIXME("(%p, %d, %p): semi-stub!\n", pbuffer, cchBuffer, dwLength); + TRACE("(%p, %d, %p)!\n", pbuffer, cchBuffer, dwLength); - if (!dwLength) + if (!dwLength || !pbuffer) return E_POINTER; - if (!pbuffer) - return HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER); + ret = get_runtime_info(NULL, NULL, NULL, 0, RUNTIME_INFO_UPGRADE_VERSION, TRUE, &info); - if (!get_install_root(system_dir)) - { - ERR("error reading registry key for installroot, returning empty path\n"); - *dwLength = 0; - } - else + if (SUCCEEDED(ret)) { - GetCORVersion(version, MAX_PATH, dwLength); - lstrcatW(system_dir, version); - lstrcatW(system_dir, slash); - *dwLength = lstrlenW(system_dir) + 1; - - if (cchBuffer < *dwLength) - return HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER); + *dwLength = cchBuffer; + ret = ICLRRuntimeInfo_GetRuntimeDirectory(info, pbuffer, dwLength); - lstrcpyW(pbuffer, system_dir); + ICLRRuntimeInfo_Release(info); } - return S_OK; + return ret; } HRESULT WINAPI GetCORVersion(LPWSTR pbuffer, DWORD cchBuffer, DWORD *dwLength) { - static const WCHAR version[] = {'v','2','.','0','.','5','0','7','2','7',0}; + ICLRRuntimeInfo *info; + HRESULT ret; - FIXME("(%p, %d, %p): semi-stub!\n", pbuffer, cchBuffer, dwLength); + TRACE("(%p, %d, %p)!\n", pbuffer, cchBuffer, dwLength); if (!dwLength || !pbuffer) return E_POINTER; - *dwLength = lstrlenW(version) + 1; + ret = get_runtime_info(NULL, NULL, NULL, 0, RUNTIME_INFO_UPGRADE_VERSION, TRUE, &info); - if (cchBuffer < *dwLength) - return HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER); + if (SUCCEEDED(ret)) + { + *dwLength = cchBuffer; + ret = ICLRRuntimeInfo_GetVersionString(info, pbuffer, dwLength); - lstrcpyW(pbuffer, version); + ICLRRuntimeInfo_Release(info); + } - return S_OK; + return ret; } HRESULT WINAPI GetRequestedRuntimeInfo(LPCWSTR pExe, LPCWSTR pwszVersion, LPCWSTR pConfigurationFile, diff --git a/dlls/mscoree/tests/mscoree.c b/dlls/mscoree/tests/mscoree.c index a50ce97..b7c7f1e 100644 --- a/dlls/mscoree/tests/mscoree.c +++ b/dlls/mscoree/tests/mscoree.c @@ -67,6 +67,14 @@ static void test_versioninfo(void) } hr = pGetCORVersion(version, 1, &size); + if (hr == CLR_E_SHIM_RUNTIME) + { + /* FIXME: Get Mono packaged properly so we can fail here. */ + todo_wine ok(hr == HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER),"GetCORVersion returned %08x\n", hr); + skip("No .NET runtimes are installed\n"); + return; + } + ok(hr == HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER),"GetCORVersion returned %08x\n", hr); hr = pGetCORVersion(version, MAX_PATH, &size); -- 1.7.1