summaryrefslogtreecommitdiffstats
path: root/PC/launcher2.c
diff options
context:
space:
mode:
authorSteve Dower <steve.dower@python.org>2024-02-12 17:05:38 (GMT)
committerGitHub <noreply@github.com>2024-02-12 17:05:38 (GMT)
commitc39272e143b346bd6a3c04ca4fbf299163888277 (patch)
tree7953fdee6cc204f9ddc3fb822f65fa42d2e1a79d /PC/launcher2.c
parent91bf01d4b15a40be4510fd9ee5e6dc8e9c019fce (diff)
downloadcpython-c39272e143b346bd6a3c04ca4fbf299163888277.zip
cpython-c39272e143b346bd6a3c04ca4fbf299163888277.tar.gz
cpython-c39272e143b346bd6a3c04ca4fbf299163888277.tar.bz2
gh-115049: Fix py.exe failing when user has no LocalAppData. (GH-115185)
Also ensure we always display a debug message or error for RC_INTERNAL_ERROR
Diffstat (limited to 'PC/launcher2.c')
-rw-r--r--PC/launcher2.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/PC/launcher2.c b/PC/launcher2.c
index e426ecc..90b0fde 100644
--- a/PC/launcher2.c
+++ b/PC/launcher2.c
@@ -1594,6 +1594,7 @@ _registryReadLegacyEnvironment(const SearchInfo *search, HKEY root, EnvironmentI
int count = swprintf_s(realTag, tagLength + 4, L"%s-32", env->tag);
if (count == -1) {
+ debug(L"# Failed to generate 32bit tag\n");
free(realTag);
return RC_INTERNAL_ERROR;
}
@@ -1749,10 +1750,18 @@ appxSearch(const SearchInfo *search, EnvironmentInfo **result, const wchar_t *pa
exeName = search->windowed ? L"pythonw.exe" : L"python.exe";
}
- if (FAILED(SHGetFolderPathW(NULL, CSIDL_LOCAL_APPDATA, NULL, 0, buffer)) ||
- !join(buffer, MAXLEN, L"Microsoft\\WindowsApps") ||
+ // Failure to get LocalAppData may just mean we're running as a user who
+ // doesn't have a profile directory.
+ // In this case, return "not found", but don't fail.
+ // Chances are they can't launch Store installs anyway.
+ if (FAILED(SHGetFolderPathW(NULL, CSIDL_LOCAL_APPDATA, NULL, 0, buffer))) {
+ return RC_NO_PYTHON;
+ }
+
+ if (!join(buffer, MAXLEN, L"Microsoft\\WindowsApps") ||
!join(buffer, MAXLEN, packageFamilyName) ||
!join(buffer, MAXLEN, exeName)) {
+ debug(L"# Failed to construct App Execution Alias path\n");
return RC_INTERNAL_ERROR;
}
@@ -1982,6 +1991,7 @@ collectEnvironments(const SearchInfo *search, EnvironmentInfo **result)
EnvironmentInfo *env = NULL;
if (!result) {
+ debug(L"# collectEnvironments() was passed a NULL result\n");
return RC_INTERNAL_ERROR;
}
*result = NULL;
@@ -2276,6 +2286,7 @@ int
selectEnvironment(const SearchInfo *search, EnvironmentInfo *root, EnvironmentInfo **best)
{
if (!best) {
+ debug(L"# selectEnvironment() was passed a NULL best\n");
return RC_INTERNAL_ERROR;
}
if (!root) {