Skip to content
Snippets Groups Projects
Unverified Commit b1924b10 authored by Anthony Shaw's avatar Anthony Shaw Committed by GitHub
Browse files

GH-95029: Describe Windows Store package isolation and redirection in more detail (GH-95030)

parent 6e2fbdab
Branches
Tags
No related merge requests found
......@@ -34,7 +34,7 @@ developers using Python for any kind of project.
:ref:`windows-store` is a simple installation of Python that is suitable for
running scripts and packages, and using IDLE or other development environments.
It requires Windows 10, but can be safely installed without corrupting other
It requires Windows 10 and above, but can be safely installed without corrupting other
programs. It also provides many convenient commands for launching Python and
its tools.
......@@ -348,14 +348,42 @@ Python in Start and right-click to select Uninstall. Uninstalling will
remove all packages you installed directly into this Python installation, but
will not remove any virtual environments
Known Issues
Known issues
------------
Redirection of local data, registry, and temporary paths
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Because of restrictions on Microsoft Store apps, Python scripts may not have
full write access to shared locations such as ``TEMP`` and the registry.
full write access to shared locations such as :envvar:`TEMP` and the registry.
Instead, it will write to a private copy. If your scripts must modify the
shared locations, you will need to install the full installer.
At runtime, Python will use a private copy of well-known Windows folders and the registry.
For example, if the environment variable :envvar:`%APPDATA%` is :file:`c:\\Users\\<user>\\AppData\\`,
then when writing to :file:`C:\\Users\\<user>\\AppData\\Local` will write to
:file:`C:\\Users\\<user>\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\\LocalCache\\Local\\`.
When reading files, Windows will return the file from the private folder, or if that does not exist, the
real Windows directory. For example reading :file:`C:\\Windows\\System32` returns the contents of :file:`C:\\Windows\\System32`
plus the contents of :file:`C:\\Program Files\\WindowsApps\\package_name\\VFS\\SystemX86`.
You can find the real path of any existing file using :func:`os.path.realpath`:
.. code-block:: python
>>> import os
>>> test_file = 'C:\\Users\\example\\AppData\\Local\\test.txt'
>>> os.path.realpath(test_file)
'C:\\Users\\example\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\\LocalCache\\Local\\test.txt'
When writing to the Windows Registry, the following behaviors exist:
* Reading from ``HKLM\\Software`` is allowed and results are merged with the :file:`registry.dat` file in the package.
* Writing to ``HKLM\\Software`` is not allowed if the corresponding key/value exists, i.e. modifying existing keys.
* Writing to ``HKLM\\Software`` is allowed as long as a corresponding key/value does not exist in the package
and the user has the correct access permissions.
For more detail on the technical basis for these limitations, please consult
Microsoft's documentation on packaged full-trust apps, currently available at
`docs.microsoft.com/en-us/windows/msix/desktop/desktop-to-uwp-behind-the-scenes
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment