From 6ee29c048cbbd6291e672a0c9b4ecdf0f770673c Mon Sep 17 00:00:00 2001 From: Vincent Povirk Date: Sat, 4 May 2019 13:25:58 -0500 Subject: [PATCH] mscoree: Accept old framework build in exe metadata. Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=27185 Signed-off-by: Vincent Povirk Signed-off-by: Alexandre Julliard --- dlls/mscoree/metahost.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/dlls/mscoree/metahost.c b/dlls/mscoree/metahost.c index b268acc4497..c7407273cf5 100644 --- a/dlls/mscoree/metahost.c +++ b/dlls/mscoree/metahost.c @@ -1723,11 +1723,35 @@ HRESULT get_runtime_info(LPCWSTR exefile, LPCWSTR version, LPCWSTR config_file, if (exefile && !version) { + DWORD major, minor, build; + hr = CLRMetaHost_GetVersionFromFile(0, exefile, local_version, &local_version_size); version = local_version; if (FAILED(hr)) return hr; + + /* When running an executable, specifically when getting the version number from + * the exe, native accepts a matching major.minor with build <= expected build. */ + if (!parse_runtime_version(version, &major, &minor, &build)) + { + ERR("Cannot parse %s\n", debugstr_w(version)); + return CLR_E_SHIM_RUNTIME; + } + + if (legacy) + i = 3; + else + i = NUM_RUNTIMES; + + while (i--) + { + if (runtimes[i].major == major && runtimes[i].minor == minor && runtimes[i].build >= build) + { + return ICLRRuntimeInfo_QueryInterface(&runtimes[i].ICLRRuntimeInfo_iface, + &IID_ICLRRuntimeInfo, (void **)result); + } + } } if (version)