-
-
Notifications
You must be signed in to change notification settings - Fork 767
wxPython 4.1.1: Binary versions of NVDA crashes on Windows 8.1 and earlier. #12116
Description
Steps to reproduce:
- Download a try build from PR Py3.8: Transparently use a Python virtual environment under the hood #12075
- Try to execute downloaded launcher on Windows 8.1, Windows Server 2012 or Windows 7 SP1.
Actual behavior:
NVDA startup sound plays and the Windows display a dialog informing that NVDA Aplication has stopped working.
Dump file from NVDA
nvda-old.log
Expected behavior:
NVDA should work normally.
System configuration
NVDA installed/portable/running from source:
Running from launcher and portable - no problems when running from source on the same machines.
NVDA version:
nvda_snapshot_try-py3.8_venv-21812,b834a4e6
Windows version:
Windows 7 SP1, Windows Server 2012, Windows 8.1
Name and version of other software in use when reproducing the issue:
None
Other information about your system:
Other questions
Does the issue still occur after restarting your computer?
Yes
Have you tried any other versions of NVDA? If so, please report their behaviors.
Versions using WxPython 4.0.3 works okay.
If add-ons are disabled, is your problem still occurring?
Yes -- tested with a clean config
Did you try to run the COM registry fixing tool in NVDA menu / tools?
N/A
#Additional info:
I've finally tracked it down to two things:
- WXPython 4.1.1 - if I build the launcher with wxPython 4.1.0 there is no crash.
- Version of Universal CRT bundled in the launcher - if I don't bundle these libraries or bundle different versions of them (see below) NVDA starts properly. Note that it does not matter if the machine in question has Universal CRT installed or not since according to the Microsoft help page about dll search order directory of the current application always has precedence over dll's bundled with Windows.
Possible solutions:
Ideally we should get to the bottom of this problem and understand why wxPython 4.1.1 causes a crash with the version of the Universal CRT that we bundle. I don't know if the dump above is sufficient to debug further - my experience with using a debugger is almost non existent it'd be great if someone more experienced could take a look at it. If this proves not to be easily fixable I see a few possible solutions:
Use different version of the Universal CRT
I've discovered that using Universal CRt libraries from Windows 10 SDK 18362 or later works around this issue. This is in contrast which what Microsoft recommends for applications which need to bundle these libraries but it seems to work. Since I do not really understand why it works it is hard to recommend it as a solution.
Don't bundle Universal CRt with NVDA.
This also solves the problem but causes NVDA not to work on machines without Universal CRt i.e. clean installs of Windows so it also isn't very appealing.
Use wxPython 4.1.0
As described above this crash does not occur with 4.1.0 which is compatible with Python 3.8.