http://bugs.winehq.org/show_bug.cgi?id=30529
Bug #: 30529 Summary: LiteStep 0.3 refuses to install due to mismatched VC++ runtime versions (8.0.50727.42 (2005), 8.0.50727.762 (2005 SP1), 9.0.21022.8 (2008)) Product: Wine Version: 1.5.2 Platform: x86 OS/Version: Linux Status: NEW Severity: normal Priority: P2 Component: msvcrt AssignedTo: wine-bugs@winehq.org ReportedBy: focht@gmx.net Classification: Unclassified
Hello,
continuation of bug 17631 With IAssemblyCache::QueryAssemblyInfo implemented it still fails for this specific installer due to exact version mismatch (installer queries with fully qualified name).
VC++ 8.0 (2005): v8.0.50727.42
--- snip --- ... 0024:Call KERNEL32.LoadLibraryExA(00409780 "C:\users\focht\Temp\nsq76e4.tmp\System.dll",00000000,00000008) ret=00401f92 ... 0024:Call KERNEL32.GetProcAddress(10000000,00409380 "Call") ret=00401fa2 0024:Ret KERNEL32.GetProcAddress() retval=00910011 ret=00401fa2 0024:CALL System.Call(00020080,00000400,007a3000,0040af80,00409000) ret=00401fe0 ... 0024:trace:sxs:cache_QueryAssemblyInfo 0x174938, 0x00000000, L"Microsoft.VC80.CRT,version="8.0.50727.42",type="win32",processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b"", 0x1677d8 0024:trace:sxs:CreateAssemblyNameObject 0x32e360, L"Microsoft.VC80.CRT,version="8.0.50727.42",type="win32",processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b"", 0x00000001, (nil) ... 0024:Call KERNEL32.GetFileAttributesW(001788d0 L"C:\windows\winsxs\manifests\x86_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.42_none_deadbeef.manifest") ret=7df0151a 0024:Ret KERNEL32.GetFileAttributesW() retval=ffffffff ret=7df0151a ... 0024:RET System.Call() retval=00000000 ret=00401fe0 0024:Call KERNEL32.FreeLibrary(10000000) ret=00401fff --- snip ---
VC++ 8.0 (2005) hotfix: v8.0.50727.163
--- snip --- ... 0024:trace:sxs:cache_QueryAssemblyInfo 0x174938, 0x00000000, L"Microsoft.VC80.CRT,version="8.0.50727.163",type="win32",processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b"", 0x1677d8 0024:trace:sxs:CreateAssemblyNameObject 0x32e360, L"Microsoft.VC80.CRT,version="8.0.50727.163",type="win32",processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b"", 0x00000001, (nil) ... 0024:Call KERNEL32.GetFileAttributesW(001788d0 L"C:\windows\winsxs\manifests\x86_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.163_none_deadbeef.manifest") ret=7df0151a 0024:Ret KERNEL32.GetFileAttributesW() retval=ffffffff ret=7df0151a ... --- snip ---
VC++ 8.0 (2005) SP1: v8.0.50727.762
--- snip --- ... 0024:trace:sxs:cache_QueryAssemblyInfo 0x174938, 0x00000000, L"Microsoft.VC80.CRT,version="8.0.50727.762",type="win32",processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b"", 0x1677d8 0024:trace:sxs:CreateAssemblyNameObject 0x32e360, L"Microsoft.VC80.CRT,version="8.0.50727.762",type="win32",processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b"", 0x00000001, (nil) ... 0024:Call KERNEL32.GetFileAttributesW(001788d0 L"C:\windows\winsxs\manifests\x86_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.762_none_deadbeef.manifest") ret=7df0151a 0024:Ret KERNEL32.GetFileAttributesW() retval=ffffffff ret=7df0151a ... --- snip ---
VC++ 8.0 (2005) SP1: v8.0.50727.1433
--- snip --- ... 0024:trace:sxs:cache_QueryAssemblyInfo 0x174938, 0x00000000, L"Microsoft.VC80.CRT,version="8.0.50727.1433",type="win32",processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b"", 0x1677d8 0024:trace:sxs:CreateAssemblyNameObject 0x32e360, L"Microsoft.VC80.CRT,version="8.0.50727.1433",type="win32",processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b"", 0x00000001, (nil) ... 0024:Call KERNEL32.GetFileAttributesW(001788d0 L"C:\windows\winsxs\manifests\x86_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.1433_none_deadbeef.manifest") ret=7df0151a 0024:Ret KERNEL32.GetFileAttributesW() retval=ffffffff ret=7df0151a ... --- snip ---
VC++ 9.0 (2008): v9.0.21022.8
--- snip --- 0024:trace:sxs:cache_QueryAssemblyInfo 0x174938, 0x00000000, L"Microsoft.VC90.CRT,version="9.0.21022.8",type="win32",processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b"", 0x1677d8 0024:trace:sxs:CreateAssemblyNameObject 0x32e360, L"Microsoft.VC90.CRT,version="9.0.21022.8",type="win32",processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b"", 0x00000001, (nil) ... 0024:Call KERNEL32.GetFileAttributesW(001788d0 L"C:\windows\winsxs\manifests\x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.21022.8_none_deadbeef.manifest") ret=7df0151a 0024:Ret KERNEL32.GetFileAttributesW() retval=ffffffff ret=7df0151a ... --- snip ---
If you create fake manifests matching the requested version numbers the installer will properly detect all VC++ runtimes.
VC++ 8.0 (2005): 8.0.50727.42 VC++ 8.0 (2005) SP1: 8.0.50727.762 VC++ 9.0 (2008): 9.0.21022.8
Maybe QueryAssemblyInfo() is allowed to make use of the assembly binding redirect feature, returning assembly info for qualified name that matches a version range. That way only one manifest for each VC++ runtime needs to be provided. Though I could be wrong ... then Wine has to provide more fake manifests, covering various versions of the same VC++ runtime.
$ du -sh LOSI-0.3.exe 4.8M LOSI-0.3.exe
$ sha1sum LOSI-0.3.exe cee31fa9ebf1838b89e7452e6269b4d20f1c51b8 LOSI-0.3.exe
$ wine --version wine-1.5.3
Regards