From 3a5afc14e16370c1f4f72d43cb553298ad9a1fa4 Mon Sep 17 00:00:00 2001 From: Steve Dower Date: Mon, 7 Feb 2022 16:59:40 +0000 Subject: [PATCH] bpo-46638: Makes registry virtualisation setting stable when building MSIX packages (GH-31130) --- .../2022-02-04-18-02-33.bpo-46638.mSJOSX.rst | 4 ++++ PC/layout/support/appxmanifest.py | 14 +++++++++++--- PC/layout/support/constants.py | 2 +- 3 files changed, 16 insertions(+), 4 deletions(-) create mode 100644 Misc/NEWS.d/next/Windows/2022-02-04-18-02-33.bpo-46638.mSJOSX.rst diff --git a/Misc/NEWS.d/next/Windows/2022-02-04-18-02-33.bpo-46638.mSJOSX.rst b/Misc/NEWS.d/next/Windows/2022-02-04-18-02-33.bpo-46638.mSJOSX.rst new file mode 100644 index 00000000000..536aae68f83 --- /dev/null +++ b/Misc/NEWS.d/next/Windows/2022-02-04-18-02-33.bpo-46638.mSJOSX.rst @@ -0,0 +1,4 @@ +Ensures registry virtualization is consistently disabled. For 3.10 and +earlier, it remains enabled (some registry writes are protected), while for +3.11 and later it is disabled (registry modifications affect all +applications). diff --git a/PC/layout/support/appxmanifest.py b/PC/layout/support/appxmanifest.py index 15119b02a80..427a36f31c8 100644 --- a/PC/layout/support/appxmanifest.py +++ b/PC/layout/support/appxmanifest.py @@ -412,14 +412,22 @@ def get_appxmanifest(ns): if value: node.text = value - winver = sys.getwindowsversion()[:3] + try: + winver = tuple(int(i) for i in os.getenv("APPX_DATA_WINVER", "").split(".", maxsplit=3)) + except (TypeError, ValueError): + winver = () + + # Default "known good" version is 10.0.22000, first Windows 11 release + winver = winver or (10, 0, 22000) + if winver < (10, 0, 17763): winver = 10, 0, 17763 find_or_add(xml, "m:Dependencies/m:TargetDeviceFamily").set( - "MaxVersionTested", "{}.{}.{}.0".format(*winver) + "MaxVersionTested", "{}.{}.{}.{}".format(*(winver + (0, 0, 0, 0)[:4])) ) - if winver > (10, 0, 17763): + # Only for Python 3.11 and later. Older versions do not disable virtualization + if (VER_MAJOR, VER_MINOR) >= (3, 11) and winver > (10, 0, 17763): disable_registry_virtualization(xml) app = add_application( diff --git a/PC/layout/support/constants.py b/PC/layout/support/constants.py index 6cf0fe1d34c..6efd8bcd5cb 100644 --- a/PC/layout/support/constants.py +++ b/PC/layout/support/constants.py @@ -16,7 +16,7 @@ def _unpack_hexversion(): hexversion = int(os.getenv("PYTHON_HEXVERSION"), 16) except (TypeError, ValueError): hexversion = sys.hexversion - return struct.pack(">i", sys.hexversion) + return struct.pack(">i", hexversion) def _get_suffix(field4):