http://bugs.winehq.org/show_bug.cgi?id=31603
Bug #: 31603 Summary: App manifests that specify processorArchitecture="*" fail to find assemblies Product: Wine Version: 1.5.12 Platform: x86 OS/Version: Linux Status: NEW Severity: normal Priority: P2 Component: ntdll AssignedTo: wine-bugs@winehq.org ReportedBy: dank@kegel.com Classification: Unclassified
Doing unset WINEPREFIX rm -rf ~/.wine sh winetricks -q vcrun2008 cd ~/wine-git/dlls/msvcr90/tests WINEDLLOVERRIDES=msvcr90=n ~/wine-git/wine msvcr90_test.exe.so says msvcr90.c:243: Tests skipped: msvcr90.dll not installed (got 126)
This seems wrong; that dll is in fact installed. The app in question is built with the manifest http://source.winehq.org/source/dlls/msvcr90/tests/msvcr90.manifest which contains the line processorArchitecture="*"
Tracing through the code, lookup_manifest_file in ntdll/actctx.c seems to incorrectly parse the native DLL's manifest as having build 0 rather than 30729.
The problem appears to be that line 1872 assumes that the string lookup contains no *'s other than the ones in lookup_fmtW, and so doesn't skip to where it expected to when it does the strchrW:
1826 static const WCHAR wine_trailerW[] = {'d','e','a','d','b','e','e','f','.','m','a','n','i','f','e','s','t'};
1842 sprintfW( lookup, lookup_fmtW, ai->arch, ai->name, ai->public_key, 1843 ai->version.major, ai->version.minor, lang );
1872 tmp = dir_info->FileName + (strchrW(lookup, '*') - lookup); 1873 build = atoiW(tmp); 1874 if (build < min_build) continue;
If ai->arch contains a '*', as it does in tests/msvcr90.manifest, this assumption is violated. Changing the manifest to say processorArchitecture="x86" lets the test run and find the native DLL, at least on x86.
So, is the manifest wrong, or is lookup_manifest_file() wrong?
(This came up while I was trying to write tests for vcomp.dll. It was frustrating to find that the example I'd borrowed the manifest from was broken.)
http://bugs.winehq.org/show_bug.cgi?id=31603
--- Comment #1 from Dan Kegel dank@kegel.com 2012-09-02 15:19:50 CDT --- (I can't even copy and paste one line of text properly. I wanted lines 1823-1825, not 1826:
1823 static const WCHAR lookup_fmtW[] = 1824 {'%','s','_','%','s','_','%','s','_','%','u','.','%','u','.','*','.','*','_', 1825 '%','s','_','*','.','m','a','n','i','f','e','s','t',0};
)
http://bugs.winehq.org/show_bug.cgi?id=31603
Erich Hoover ehoover@mines.edu changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |ehoover@mines.edu
--- Comment #2 from Erich Hoover ehoover@mines.edu 2012-09-05 23:12:23 CDT --- (In reply to comment #0)
... So, is the manifest wrong, or is lookup_manifest_file() wrong? ...
It looks like there's a comment on MSDN that it should support "*": http://msdn.microsoft.com/en-us/library/windows/desktop/aa374191%28v=vs.85%2...
https://bugs.winehq.org/show_bug.cgi?id=31603
Austin English austinenglish@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Keywords| |download, testcase
--- Comment #3 from Austin English austinenglish@gmail.com --- WINEDLLOVERRIDES=msvcr90=n ~/wine-git/wine msvcr90_test.exe.so fixme:iphlpapi:NotifyAddrChange (Handle 0x166e7d0, overlapped 0x166e7dc): stub wine: configuration in '/home/austin/.wine' has been updated. fixme:actctx:parse_depend_manifests Could not find dependent assembly L"microsoft.vc90.crt" (9.0.20718.0) msvcr90.c:318: Tests skipped: msvcr90.dll not installed (got 126) msvcr90: 0 tests executed (0 marked as todo, 0 failures), 1 skipped.
still in wine-1.7.36.
https://bugs.winehq.org/show_bug.cgi?id=31603
super_man@post.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |super_man@post.com
--- Comment #4 from super_man@post.com --- The test still fails. I have seen this isue very often, but the version has been different.
wine 1.8.rc1
https://bugs.winehq.org/show_bug.cgi?id=31603
--- Comment #5 from super_man@post.com --- wine msvcr90_test.exe.so fixme:actctx:parse_depend_manifests Could not find dependent assembly L"microsoft.vc90.crt" (9.0.20718.0)
wine 1.9.3
https://bugs.winehq.org/show_bug.cgi?id=31603
--- Comment #6 from Gijs Vermeulen gijsvrm@gmail.com --- Tests still don't run with wine-6.18-241-ga87abdbe857.
https://bugs.winehq.org/show_bug.cgi?id=31603
Lorenzo Ferrillo lorenzofer@live.it changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |lorenzofer@live.it
--- Comment #7 from Lorenzo Ferrillo lorenzofer@live.it --- With wine 7.2, there is the issue of the "*" seems to be resolved, but the test are still failing. The first issue seems that the microsoft.vc90.crt manifest isn't installed (the vc80 is present instead). Creating the assembly manually (or avoid using winetricks to install vcrun2008 that remove all the manfiest related to it), fix the actctx:parse_depend_manifests Could not find dependent assembly issue. But then when msvcr90 is setted to native, the LoadDll routine fail to load it, seems to fail when opening the file mapping, so the trsts still fail