]> granicus.if.org Git - python/commitdiff
Issue #26071: bdist_wininst created binaries fail to start and find 32bit Python
authorSteve Dower <steve.dower@microsoft.com>
Sat, 16 Jan 2016 21:54:53 +0000 (13:54 -0800)
committerSteve Dower <steve.dower@microsoft.com>
Sat, 16 Jan 2016 21:54:53 +0000 (13:54 -0800)
Lib/distutils/command/wininst-14.0-amd64.exe
Lib/distutils/command/wininst-14.0.exe
Misc/NEWS
PC/bdist_wininst/bdist_wininst.vcxproj
PC/bdist_wininst/install.c

index 7a5e78d52bcc5db0be1baff6cdad41e172a5b81f..22299543a97ffc1525a3b1c778cb158d6c6430ad 100644 (file)
Binary files a/Lib/distutils/command/wininst-14.0-amd64.exe and b/Lib/distutils/command/wininst-14.0-amd64.exe differ
index cc43296b677a5b995899bb60bbe0e632163e64ae..0dac1103d98db0af1e9027c41fe921136c5f6396 100644 (file)
Binary files a/Lib/distutils/command/wininst-14.0.exe and b/Lib/distutils/command/wininst-14.0.exe differ
index 6aa74cafca2e4409ff0687db3b0a49e7462cfb04..735e420ac28de4f88e675f012e3a15fb7eb7c7a3 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -173,6 +173,9 @@ Build
 Windows
 -------
 
+- Issue #26071: bdist_wininst created binaries fail to start and find
+  32bit Python
+
 - Issue #26073: Update the list of magic numbers in launcher
 
 - Issue #26065: Excludes venv from library when generating embeddable
index 2ab474e439673c7151803ea2b3f04d73d5eb2e4c..7971dc760ed75eabc1bc069f5ce029e322dc5663 100644 (file)
@@ -70,6 +70,8 @@
       <Optimization>MinSpace</Optimization>
       <AdditionalIncludeDirectories>$(PySourcePath)Modules\zlib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary Condition="'$(Configuration)'=='Debug'">MultiThreadedDebug</RuntimeLibrary>
+      <RuntimeLibrary Condition="'$(Configuration)'=='Release'">MultiThreaded</RuntimeLibrary>
     </ClCompile>
     <ResourceCompile>
       <AdditionalIncludeDirectories>$(PySourcePath)PC\bdist_wininst;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
index f39b3819dc088596c571d19aef46e65c14c17e5e..cb037ff2c603b6714017d01be27e513f52e30804 100644 (file)
@@ -153,6 +153,13 @@ char *failure_reason = NULL;
 HANDLE hBitmap;
 char *bitmap_bytes;
 
+static const char *REGISTRY_SUFFIX_6432 =
+#ifdef MS_WIN64
+                                          "";
+#else
+                                          "-32";
+#endif
+
 
 #define WM_NUMFILES WM_USER+1
 /* wParam: 0, lParam: total number of files */
@@ -657,8 +664,8 @@ static HINSTANCE LoadPythonDll(char *fname)
     if (h)
         return h;
     wsprintf(subkey_name,
-             "SOFTWARE\\Python\\PythonCore\\%d.%d\\InstallPath",
-             py_major, py_minor);
+             "SOFTWARE\\Python\\PythonCore\\%d.%d%s\\InstallPath",
+             py_major, py_minor, REGISTRY_SUFFIX_6432);
     if (ERROR_SUCCESS != RegQueryValue(HKEY_CURRENT_USER, subkey_name,
                                        fullpath, &size) &&
         ERROR_SUCCESS != RegQueryValue(HKEY_LOCAL_MACHINE, subkey_name,
@@ -666,7 +673,9 @@ static HINSTANCE LoadPythonDll(char *fname)
         return NULL;
     strcat(fullpath, "\\");
     strcat(fullpath, fname);
-    return LoadLibrary(fullpath);
+    // We use LOAD_WITH_ALTERED_SEARCH_PATH to ensure any dependent DLLs
+    // next to the Python DLL (eg, the CRT DLL) are also loaded.
+    return LoadLibraryEx(fullpath, NULL, LOAD_WITH_ALTERED_SEARCH_PATH);
 }
 
 static int prepare_script_environment(HINSTANCE hPython)
@@ -2250,6 +2259,8 @@ int DoInstall(void)
     GetPrivateProfileString("Setup", "user_access_control", "",
                              user_access_control, sizeof(user_access_control), ini_file);
 
+    strcat(target_version, REGISTRY_SUFFIX_6432);
+
     // See if we need to do the Vista UAC magic.
     if (strcmp(user_access_control, "force")==0) {
         if (!MyIsUserAnAdmin()) {