http://bugs.winehq.org/show_bug.cgi?id=58527
Louis Lenders xerox.xerox2000x@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Keywords| |download Status|UNCONFIRMED |NEW CC| |xerox.xerox2000x@gmail.com URL| |https://www.autodesk.com/es | |/products/autocad/included- | |toolsets/autocad-electrical Ever confirmed|0 |1
--- Comment #6 from Louis Lenders xerox.xerox2000x@gmail.com --- Setting to confirmed.
At the end of this comment is a very sad hack that makes the application start for me.
AFAICT the problem is in lookup_assembly. It says in a comment there:
/* Lookup in <dir>\name.dll * <dir>\name.manifest * <dir>\name\name.dll * <dir>\name\name.manifest * * First 'appdir' is used as <dir>, if that failed * it tries application manifest file path. */
The problem is that the requested manifests are not in <dir>\name\name.manifest, but in <dir>"ODIS"\name\name.manifest.
This "ODIS" directory is defined as some kind of private path in Setup.exe.config: <configuration> <windows> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <probing privatePath="ODIS"/> </assemblyBinding> </windows> </configuration>
So my guess is wine is lacking support for such privatepath?
Note: Instead of a the stupid hack below, which just inserts "ODIS" in the path, you can also extract the files with 7z, and then move the odis.bs.w* directories out of the "ODIS" directory to where Setup.exe is. Than the installer starts as well.
Sad hack:
diff --git a/dlls/ntdll/actctx.c b/dlls/ntdll/actctx.c index 99b44a70275..586c0af9ea1 100644 --- a/dlls/ntdll/actctx.c +++ b/dlls/ntdll/actctx.c @@ -3380,8 +3380,9 @@ static NTSTATUS lookup_assembly(struct actctx_loader* acl, *p = 0; status = open_manifest_file( acl, ai, lang, directory, buffer, total ); if (status != STATUS_SXS_ASSEMBLY_NOT_FOUND) goto done; - - swprintf( p, total - (p - buffer), L"%s\", ai->name ); + WCHAR d[255] = L""; + swprintf( p, total - (p - buffer), L"%s\", wcscat(wcscat(d,L"ODIS\"),ai->name) ); + FIXME( "looking for name=%s \n", debugstr_w(buffer)); status = open_manifest_file( acl, ai, lang, directory, buffer, total ); }