From 6b68ed11cfef9a4755e4be2bee705a9e8de9002e Mon Sep 17 00:00:00 2001 From: Steve Dower Date: Tue, 8 Nov 2022 20:43:41 +0000 Subject: [PATCH 1/3] Change to more performant functions for UWP launcher --- PC/python_uwp.cpp | 89 ++++++++++++++++++++++++++++++++++------------- 1 file changed, 65 insertions(+), 24 deletions(-) diff --git a/PC/python_uwp.cpp b/PC/python_uwp.cpp index 88369e8fbfeb38..9ced3b04fd1c2a 100644 --- a/PC/python_uwp.cpp +++ b/PC/python_uwp.cpp @@ -10,6 +10,7 @@ #include +#include #include #include @@ -27,15 +28,61 @@ const wchar_t *PROGNAME = L"python.exe"; #endif #endif +static std::wstring +get_package_family() +{ + try { + UINT32 nameLength = MAX_PATH; + std::wstring name; + name.resize(nameLength); + DWORD rc = GetCurrentPackageFamilyName(&nameLength, name.data()); + if (rc == ERROR_SUCCESS) { + name.resize(nameLength - 1); + return name; + } + else if (rc != ERROR_INSUFFICIENT_BUFFER) { + throw rc; + } + name.resize(nameLength); + rc = GetCurrentPackageFamilyName(&nameLength, name.data()); + if (rc != ERROR_SUCCESS) { + throw rc; + } + name.resize(nameLength - 1); + return name; + } + catch (...) { + } + + return std::wstring(); +} + static std::wstring get_user_base() { + const auto family = get_package_family(); + std::wstring path; + + if (!family.empty()) { + PWSTR localAppData; + if (SUCCEEDED(SHGetKnownFolderPath(FOLDERID_LocalAppData, 0, + NULL, &localAppData))) { + path = std::wstring(localAppData) + + L"\\Packages\\" + + family + + L"\\LocalCache\\local-packages"; + + CoTaskMemFree(localAppData); + return path; + } + } + try { const auto appData = winrt::Windows::Storage::ApplicationData::Current(); if (appData) { const auto localCache = appData.LocalCacheFolder(); if (localCache) { - auto path = localCache.Path(); + path = localCache.Path(); if (!path.empty()) { return std::wstring(path) + L"\\local-packages"; } @@ -43,23 +90,6 @@ get_user_base() } } catch (...) { } - return std::wstring(); -} - -static std::wstring -get_package_family() -{ - try { - const auto package = winrt::Windows::ApplicationModel::Package::Current(); - if (package) { - const auto id = package.Id(); - if (id) { - return std::wstring(id.FamilyName()); - } - } - } - catch (...) { - } return std::wstring(); } @@ -68,13 +98,24 @@ static std::wstring get_package_home() { try { - const auto package = winrt::Windows::ApplicationModel::Package::Current(); - if (package) { - const auto path = package.InstalledLocation(); - if (path) { - return std::wstring(path.Path()); - } + UINT32 pathLength = MAX_PATH; + std::wstring path; + path.resize(pathLength); + DWORD rc = GetCurrentPackagePath(&pathLength, path.data()); + if (rc == ERROR_SUCCESS) { + path.resize(pathLength - 1); + return path; + } + else if (rc != ERROR_INSUFFICIENT_BUFFER) { + throw rc; + } + path.resize(pathLength); + rc = GetCurrentPackagePath(&pathLength, path.data()); + if (rc != ERROR_SUCCESS) { + throw rc; } + path.resize(pathLength - 1); + return path; } catch (...) { } From edc732ee79dc404244e901f680b4f93262ab53a2 Mon Sep 17 00:00:00 2001 From: Steve Dower Date: Thu, 10 Nov 2022 20:53:32 +0000 Subject: [PATCH 2/3] Remove bad optimisation --- PC/python_uwp.cpp | 21 ++------------------- 1 file changed, 2 insertions(+), 19 deletions(-) diff --git a/PC/python_uwp.cpp b/PC/python_uwp.cpp index 9ced3b04fd1c2a..2beea60e5af1ef 100644 --- a/PC/python_uwp.cpp +++ b/PC/python_uwp.cpp @@ -60,31 +60,14 @@ get_package_family() static std::wstring get_user_base() { - const auto family = get_package_family(); - std::wstring path; - - if (!family.empty()) { - PWSTR localAppData; - if (SUCCEEDED(SHGetKnownFolderPath(FOLDERID_LocalAppData, 0, - NULL, &localAppData))) { - path = std::wstring(localAppData) - + L"\\Packages\\" - + family - + L"\\LocalCache\\local-packages"; - - CoTaskMemFree(localAppData); - return path; - } - } - try { const auto appData = winrt::Windows::Storage::ApplicationData::Current(); if (appData) { const auto localCache = appData.LocalCacheFolder(); if (localCache) { - path = localCache.Path(); + std::wstring path { localCache.Path().c_str() }; if (!path.empty()) { - return std::wstring(path) + L"\\local-packages"; + return path + L"\\local-packages"; } } } From e129378fcb8724ca91350c07150c4dbdc558adce Mon Sep 17 00:00:00 2001 From: Steve Dower Date: Wed, 23 Nov 2022 17:17:22 +0000 Subject: [PATCH 3/3] NEWS --- .../next/Windows/2022-11-23-17-17-16.gh-issue-99345.jOa3-f.rst | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 Misc/NEWS.d/next/Windows/2022-11-23-17-17-16.gh-issue-99345.jOa3-f.rst diff --git a/Misc/NEWS.d/next/Windows/2022-11-23-17-17-16.gh-issue-99345.jOa3-f.rst b/Misc/NEWS.d/next/Windows/2022-11-23-17-17-16.gh-issue-99345.jOa3-f.rst new file mode 100644 index 00000000000000..99db0c55a67eed --- /dev/null +++ b/Misc/NEWS.d/next/Windows/2022-11-23-17-17-16.gh-issue-99345.jOa3-f.rst @@ -0,0 +1,2 @@ +Use faster initialization functions to detect install location for Windows +Store package pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy