diff options
author | Steve Dower <steve.dower@python.org> | 2024-02-12 17:05:38 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-02-12 17:05:38 (GMT) |
commit | c39272e143b346bd6a3c04ca4fbf299163888277 (patch) | |
tree | 7953fdee6cc204f9ddc3fb822f65fa42d2e1a79d /PC/launcher2.c | |
parent | 91bf01d4b15a40be4510fd9ee5e6dc8e9c019fce (diff) | |
download | cpython-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.c | 15 |
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) { |