]> granicus.if.org Git - python/commitdiff
bpo-38359: Ensures pyw.exe launcher reads correct registry key (GH-16561)
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Thu, 3 Oct 2019 15:51:12 +0000 (08:51 -0700)
committerGitHub <noreply@github.com>
Thu, 3 Oct 2019 15:51:12 +0000 (08:51 -0700)
(cherry picked from commit 353fb1ecbfd58752dabae115c4964095e1e35e5f)

Co-authored-by: Steve Dower <steve.dower@python.org>
Misc/NEWS.d/next/Windows/2019-10-03-08-04-14.bpo-38359.wzwsl_.rst [new file with mode: 0644]
PC/launcher.c

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 (file)
index 0000000..ab6f29b
--- /dev/null
@@ -0,0 +1 @@
+Ensures ``pyw.exe`` launcher reads correct registry key.
index a260860f3c27a4d7c529b3adee4ce7401163a6bb..2749a4e7054671b43804af442b97a5a7df473868 100644 (file)
@@ -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;