Skip to content

Commit

Permalink
Use faster APIs to calculate paths at startup for Store packaged Pyth…
Browse files Browse the repository at this point in the history
…on on Windows (GH-99345)
  • Loading branch information
zooba committed Nov 23, 2022
1 parent 55bad19 commit 71a4a2d
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 25 deletions.
@@ -0,0 +1,2 @@
Use faster initialization functions to detect install location for Windows
Store package
74 changes: 49 additions & 25 deletions PC/python_uwp.cpp
Expand Up @@ -10,6 +10,7 @@

#include <string>

#include <appmodel.h>
#include <winrt\Windows.ApplicationModel.h>
#include <winrt\Windows.Storage.h>

Expand All @@ -28,37 +29,49 @@ const wchar_t *PROGNAME = L"python.exe";
#endif

static std::wstring
get_user_base()
get_package_family()
{
try {
const auto appData = winrt::Windows::Storage::ApplicationData::Current();
if (appData) {
const auto localCache = appData.LocalCacheFolder();
if (localCache) {
auto path = localCache.Path();
if (!path.empty()) {
return std::wstring(path) + L"\\local-packages";
}
}
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;
}
} catch (...) {
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_package_family()
get_user_base()
{
try {
const auto package = winrt::Windows::ApplicationModel::Package::Current();
if (package) {
const auto id = package.Id();
if (id) {
return std::wstring(id.FamilyName());
const auto appData = winrt::Windows::Storage::ApplicationData::Current();
if (appData) {
const auto localCache = appData.LocalCacheFolder();
if (localCache) {
std::wstring path { localCache.Path().c_str() };
if (!path.empty()) {
return path + L"\\local-packages";
}
}
}
}
catch (...) {
} catch (...) {
}

return std::wstring();
Expand All @@ -68,13 +81,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 (...) {
}
Expand Down

0 comments on commit 71a4a2d

Please sign in to comment.