diff options
author | Steve Dower <steve.dower@python.org> | 2019-10-03 15:31:21 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-10-03 15:31:21 (GMT) |
commit | 353fb1ecbfd58752dabae115c4964095e1e35e5f (patch) | |
tree | 727229cbf8102514ac48fef8ebec49db1a0e8717 | |
parent | a0e3d27e4e3cb5b67e325df080fb18b70c2910cf (diff) | |
download | cpython-353fb1ecbfd58752dabae115c4964095e1e35e5f.zip cpython-353fb1ecbfd58752dabae115c4964095e1e35e5f.tar.gz cpython-353fb1ecbfd58752dabae115c4964095e1e35e5f.tar.bz2 |
bpo-38359: Ensures pyw.exe launcher reads correct registry key (GH-16561)
-rw-r--r-- | Misc/NEWS.d/next/Windows/2019-10-03-08-04-14.bpo-38359.wzwsl_.rst | 1 | ||||
-rw-r--r-- | PC/launcher.c | 10 |
2 files changed, 10 insertions, 1 deletions
diff --git a/Misc/NEWS.d/next/Windows/2019-10-03-08-04-14.bpo-38359.wzwsl_.rst b/Misc/NEWS.d/next/Windows/2019-10-03-08-04-14.bpo-38359.wzwsl_.rst new file mode 100644 index 0000000..ab6f29b --- /dev/null +++ b/Misc/NEWS.d/next/Windows/2019-10-03-08-04-14.bpo-38359.wzwsl_.rst @@ -0,0 +1 @@ +Ensures ``pyw.exe`` launcher reads correct registry key. diff --git a/PC/launcher.c b/PC/launcher.c index a260860..2749a4e 100644 --- a/PC/launcher.c +++ b/PC/launcher.c @@ -141,6 +141,8 @@ static wchar_t * get_env(wchar_t * key) } #if defined(_DEBUG) +/* Do not define EXECUTABLEPATH_VALUE in debug builds as it'll + never point to the debug build. */ #if defined(_WINDOWS) #define PYTHON_EXECUTABLE L"pythonw_d.exe" @@ -154,10 +156,12 @@ static wchar_t * get_env(wchar_t * key) #if defined(_WINDOWS) #define PYTHON_EXECUTABLE L"pythonw.exe" +#define EXECUTABLEPATH_VALUE L"WindowedExecutablePath" #else #define PYTHON_EXECUTABLE L"python.exe" +#define EXECUTABLEPATH_VALUE L"ExecutablePath" #endif #endif @@ -297,8 +301,12 @@ _locate_pythons_for_key(HKEY root, LPCWSTR subkey, REGSAM flags, int bits, } data_size = sizeof(ip->executable) - 1; append_name = FALSE; - status = RegQueryValueExW(ip_key, L"ExecutablePath", NULL, &type, +#ifdef EXECUTABLEPATH_VALUE + status = RegQueryValueExW(ip_key, EXECUTABLEPATH_VALUE, NULL, &type, (LPBYTE)ip->executable, &data_size); +#else + status = ERROR_FILE_NOT_FOUND; /* actual error doesn't matter */ +#endif if (status != ERROR_SUCCESS || type != REG_SZ || !data_size) { append_name = TRUE; data_size = sizeof(ip->executable) - 1; |