http://bugs.winehq.org/show_bug.cgi?id=30758
Bug #: 30758 Summary: .NET 4.0 installer/CLR native ngen.exe runs into "unimplemented function fusion.dll.InitializeFusion, aborting" (Wine builtin fusion override during .NET 4 install) Product: Wine Version: 1.5.4 Platform: x86 OS/Version: Linux Status: NEW Severity: normal Priority: P2 Component: fusion AssignedTo: wine-bugs@winehq.org ReportedBy: focht@gmx.net Classification: Unclassified
Hello,
with bug 30707 is fixed all .NET 4.0 assemblies are now installed when using "fusion=builtin,native".
As already written, an additional "ngen=builtin" is needed for install process to avoid native ngen.exe being called which wants this unimplemented fusion API.
It's not really harmful as these deferred assembly -> GAC install steps have already been carried out by msi install itself but it might confuse/scare users looking at terminal output, spotting "unimplemented function fusion.dll.InitializeFusion, aborting".
--- snip --- 00ff:Call KERNEL32.CreateProcessW(00000000,00cb5e98 L"C:\windows\Microsoft.NET\Framework\v4.0.30319\ngen.exe executeQueuedItems 1",00000000,00000000,00000001,00000000,00000000,00cb6058 L"C:\windows\Microsoft.NET\Framework\v4.0.30319",0151d6b8,0151d698) ret=00c8ffd9 ... 0101:Call KERNEL32.__wine_kernel_init() ret=7bc5312a 00ff:Ret KERNEL32.CreateProcessW() retval=00000001 ret=00c8ffd9 ... 0101:Call KERNEL32.RaiseException(80000100,00000001,00000002,0033e640) ret=f73966d9 0101:trace:seh:raise_exception code=80000100 flags=1 addr=0x7b83940f ip=7b83940f tid=0101 0101:trace:seh:raise_exception info[0]=f7396740 0101:trace:seh:raise_exception info[1]=f7396780 wine: Call from 0x7b83940f to unimplemented function fusion.dll.InitializeFusion, aborting ... 0101:Call oleaut32.SysAllocString(0016eb08 L"Uninstalling assembly mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 because of an error during compilation: Unknown exception.\n") ret=608f07f9 ... --- snip ---
The assemblies are not really uninstalled as the message suggests.
Adding a simple stub for HRESULT WINAPI InitializeFusion(void), returning E_NOTIMPL is enough to avoid that. Only called two times:
--- snip --- ... fixme:fusion:InitializeFusion stub! fixme:fusion:InitializeFusion stub! --- snip ---
After winetricks install recipe is finished, "fusion=builtin,native" override should be dropped/reversed (not made permanent).
This allows for GAC rebuild/updates or later installation of assemblies that are not part of msi installers (using native ngen). For example to trigger manual GAC rebuild/update:
--- snip --- $ wine "c:\windows\Microsoft.NET\Framework\v4.0.30319\ngen.exe" update --- snip ---
Regard