https://bugs.winehq.org/show_bug.cgi?id=50623
Bug ID: 50623 Summary: Windows ISO Downloader 8.45 - Error messages and freeze with wine-mono Product: Wine Version: 6.1 Hardware: x86-64 URL: https://web.archive.org/web/20210128040613/https://www .heidoc.net/php/Windows-ISO-Downloader.exe OS: Linux Status: UNCONFIRMED Severity: normal Priority: P2 Component: mscoree Assignee: wine-bugs@winehq.org Reporter: winetaste@gmx.net Distribution: ---
Created attachment 69317 --> https://bugs.winehq.org/attachment.cgi?id=69317 Unhandled exceptions
Starting Windows ISO Downloader 8.45* I get an error message about an unhandled exception. I can continue, but selecting a Windows version (except "Windows 7 (August 2018)" and "DELL") results in another exception and the app freezes if I select the continue button.
winetricks dotnet40 fixes start up exception. App needs ie8 then. Winetricks ie8 fixes this and I can select "Windows 7". Other versions like "Windows 10" just freeze without exception window.
*https://www.heidoc.net/joomla/technology-science/microsoft/67-microsoft-wind...
https://bugs.winehq.org/show_bug.cgi?id=50623
Gijs Vermeulen gijsvrm@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Keywords| |download
https://bugs.winehq.org/show_bug.cgi?id=50623
--- Comment #1 from Esme Povirk madewokherd@gmail.com --- The first failure is because Microsoft.VisualBasic.Interaction:GetSetting doesn't work correctly when the registry keys are missing.
After working around that, it tries to navigate a WebBrowser control to about:blank and then modify WebBrowser.Document, but the Document object is null.
https://bugs.winehq.org/show_bug.cgi?id=50623
--- Comment #2 from Esme Povirk madewokherd@gmail.com --- A +ieframe log shows that ieframe is returning a Document object, but it's being rejected by the WebBrowser class.
[00000024: 1.76671 2] ENTER:c System.Windows.Forms.WebBrowser:get_Document ()(this:1db40788[System.Windows.Forms.WebBrowser Windows-ISO-Downloader.exe]) 0024:trace:ieframe:WebBrowser_get_Document (001C8C78)->(0031E6D0) [00000024: 1.76685 2] LEAVE:c System.Windows.Forms.WebBrowser:get_Document ()([OBJECT:00000000]
Some print statement debugging shows that it gets an object from its COM wrapper, but it fails to get an IHTMLDocument2 interface for it.
https://bugs.winehq.org/show_bug.cgi?id=50623
--- Comment #3 from Esme Povirk madewokherd@gmail.com --- Adding +mshtml shows that Mono isn't querying for IHTMLDocument2, instead for some reason it just queries for IUnknown twice.
https://bugs.winehq.org/show_bug.cgi?id=50623
--- Comment #4 from Esme Povirk madewokherd@gmail.com --- Best I can tell, Mono's JIT isn't IHTMLDocument2 as a COM interface when converting the cast instruction.
https://bugs.winehq.org/show_bug.cgi?id=50623
--- Comment #5 from Esme Povirk madewokherd@gmail.com --- I'm not sure how this is supposed to work. I was assuming that conversion of the CASTCLASS instruction would hook up to cominterop stuff, but I can't find anything like that.
https://bugs.winehq.org/show_bug.cgi?id=50623
--- Comment #6 from Esme Povirk madewokherd@gmail.com --- It looks like Mono expects COM interfaces to have the ComImport attribute, but this one has ComVisible(true) instead.
https://bugs.winehq.org/show_bug.cgi?id=50623
--- Comment #7 from Esme Povirk madewokherd@gmail.com --- After that, the winforms code tries to call a COM method with an object[] parameter:
Method (wrapper managed-to-native) int System.Windows.Forms.UnsafeNativeMethods/IHTMLDocument2:Write (intptr,object[],int&) emitted at 24eeef08 to 24eeefe0 (code length 216) [Windows-ISO-Downloader.exe] type 0x1c not handled * Assertion: should not be reached at /home/wine/wine-mono/mono/mono/metadata/marshal.c:668
The assert is in mono_array_to_lparray_impl.
Method definition:
int Write([In, MarshalAs(UnmanagedType.SafeArray)] object[] psarray);
In theory, this should be marshaled as a safearray of string, not object. I'm also not sure why mono_array_to_lparray_impl is being called when this method expects a safearray.
https://bugs.winehq.org/show_bug.cgi?id=50623
--- Comment #8 from Esme Povirk madewokherd@gmail.com --- Bizhawk has an example of a COM interface that only has InterfaceType(IUnknown) and a GUID attribute. This can be observed by opening the path configuration dialog and browsing for a path.
MSDN says that ComVisible defaults to true. So it seems like an interface should be considered a COM interface if it (a) is public, (b) has a GUID attribute, and (c) does not have ComVisible(false).
I'm not sure if (b) is even a requirement, Framework might just generate a GUID for it.
https://bugs.winehq.org/show_bug.cgi?id=50623
--- Comment #9 from Esme Povirk madewokherd@gmail.com --- The important distinction that I missed is between RCWs and CCWs. ComVisible only applies to CCWs, not RCWs. We can still call interface methods on RCWs as long as the interface has ComImport OR the method doesn't have a MethodImplAttribute with MethodCodeType=MethodCodeType.Runtime.
https://bugs.winehq.org/show_bug.cgi?id=50623
--- Comment #10 from Esme Povirk madewokherd@gmail.com --- Whoops, comments 8 and 9 weren't actually relevant to this bug because I'd added a work-around to winforms but didn't note that here. I think the current state is that we need to fix UnmanagedType.SafeArray for native wrapper input parameters, at least for object arrays.
https://bugs.winehq.org/show_bug.cgi?id=50623
--- Comment #11 from Esme Povirk madewokherd@gmail.com --- I did some separate work on safearray marshaling and found that SafeArraySubType needs to be set to a specific VT, and the default is to infer it based on the parameter type. So this might fix it: https://github.com/madewokherd/mono/commit/96853ceae1fe3ec7ec1932f840e649e30...
Not yet pushed to the develop branch because I'm waiting on CI and review.
https://bugs.winehq.org/show_bug.cgi?id=50623
--- Comment #12 from Esme Povirk madewokherd@gmail.com --- That commit doesn't help, it seems Mono does array marshaling anyway in this case. I guess cominterop_get_ccw_default_mspec must not apply to runtime-callable wrappers.
https://bugs.winehq.org/show_bug.cgi?id=50623
--- Comment #13 from Esme Povirk madewokherd@gmail.com --- Made a PR to finally fix the marshaling issues. After that, it complains about IE version but it does start.
https://github.com/madewokherd/mono/pull/6
https://bugs.winehq.org/show_bug.cgi?id=50623
--- Comment #14 from Esme Povirk madewokherd@gmail.com --- I merged the PR. A CI build with the fix is available here: https://github.com/madewokherd/mono/actions/runs/1140343521
https://bugs.winehq.org/show_bug.cgi?id=50623
Esme Povirk madewokherd@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Fixed by SHA1| |e6513521ff8b81ba838bb96d10f | |b20c64c1c2306 Resolution|--- |FIXED Status|UNCONFIRMED |RESOLVED
--- Comment #15 from Esme Povirk madewokherd@gmail.com --- The fix for this was included in wine-mono 6.4.0 which will be in Wine 6.18. Marking fixed.
https://bugs.winehq.org/show_bug.cgi?id=50623
Alexandre Julliard julliard@winehq.org changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|RESOLVED |CLOSED
--- Comment #16 from Alexandre Julliard julliard@winehq.org --- Closing bugs fixed in 6.18.