nlataill wrote:
Adding verbosity to actctx.c, it seems that this game is requesting version 8.0.50608.0, which does match major.minor, but not the whole version number (/major.minor.build.revision)/.
...
According to MSDN, it seems only major.minor is considered for version matching:
number that changes only in the /build/ or /revision/ parts indicates that the assembly is backward compatible with prior versions.
manifests used to redirect the version of a side-by-side assembly to another compatible version. The version that the assembly is being redirected to should have the same major.minor values as the original version.
I am proposing the following one-liner to ntdll/actctx.c:
isa@isa:~/downloads/tmp$ diff -u wine-0.9.49/dlls/ntdll/actctx.c /home/isa/downloads/wine-0.9.49/dlls/ntdll/actctx.c --- wine-0.9.49/dlls/ntdll/actctx.c 2007-11-09 17:56: 12.000000000 +0100 +++ /home/isa/downloads/wine-0.9.49/dlls/ntdll/actctx.c 2007-11-19 21:07:35.000000000 +0100 @@ -1390,8 +1390,8 @@ if (expected_ai) { /* FIXME: more tests */
if (assembly->type == ASSEMBLY_MANIFEST &&
memcmp(&assembly->id.version, &expected_ai->version,
sizeof(assembly->id.version)))
if (assembly->type == ASSEMBLY_MANIFEST &&
((assembly->id.version.major !=
expected_ai->version.major) || (assembly->id.version.minor != expected_ai->version.minor)) ) { FIXME("wrong version\n"); return FALSE;
With this patch, the manifest (and related DLL) is loading correctly. This does not prevent my game die shortly after, in D3D code this time. Still work to do ;-)
I think the attached patch is more complete and implements what MSDN states.