Issue #26071: bdist_wininst created binaries fail to start and find 32bit Python

This commit is contained in:
Steve Dower 2016-01-16 13:55:05 -08:00
commit 709c2aeba6
5 changed files with 19 additions and 3 deletions

View File

@ -613,6 +613,9 @@ Build
Windows 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 #26073: Update the list of magic numbers in launcher
- Issue #26065: Excludes venv from library when generating embeddable - Issue #26065: Excludes venv from library when generating embeddable

View File

@ -70,6 +70,8 @@
<Optimization>MinSpace</Optimization> <Optimization>MinSpace</Optimization>
<AdditionalIncludeDirectories>$(PySourcePath)Modules\zlib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>$(PySourcePath)Modules\zlib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary Condition="'$(Configuration)'=='Debug'">MultiThreadedDebug</RuntimeLibrary>
<RuntimeLibrary Condition="'$(Configuration)'=='Release'">MultiThreaded</RuntimeLibrary>
</ClCompile> </ClCompile>
<ResourceCompile> <ResourceCompile>
<AdditionalIncludeDirectories>$(PySourcePath)PC\bdist_wininst;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>$(PySourcePath)PC\bdist_wininst;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>

View File

@ -153,6 +153,13 @@ char *failure_reason = NULL;
HANDLE hBitmap; HANDLE hBitmap;
char *bitmap_bytes; char *bitmap_bytes;
static const char *REGISTRY_SUFFIX_6432 =
#ifdef MS_WIN64
"";
#else
"-32";
#endif
#define WM_NUMFILES WM_USER+1 #define WM_NUMFILES WM_USER+1
/* wParam: 0, lParam: total number of files */ /* wParam: 0, lParam: total number of files */
@ -657,8 +664,8 @@ static HINSTANCE LoadPythonDll(char *fname)
if (h) if (h)
return h; return h;
wsprintf(subkey_name, wsprintf(subkey_name,
"SOFTWARE\\Python\\PythonCore\\%d.%d\\InstallPath", "SOFTWARE\\Python\\PythonCore\\%d.%d%s\\InstallPath",
py_major, py_minor); py_major, py_minor, REGISTRY_SUFFIX_6432);
if (ERROR_SUCCESS != RegQueryValue(HKEY_CURRENT_USER, subkey_name, if (ERROR_SUCCESS != RegQueryValue(HKEY_CURRENT_USER, subkey_name,
fullpath, &size) && fullpath, &size) &&
ERROR_SUCCESS != RegQueryValue(HKEY_LOCAL_MACHINE, subkey_name, ERROR_SUCCESS != RegQueryValue(HKEY_LOCAL_MACHINE, subkey_name,
@ -666,7 +673,9 @@ static HINSTANCE LoadPythonDll(char *fname)
return NULL; return NULL;
strcat(fullpath, "\\"); strcat(fullpath, "\\");
strcat(fullpath, fname); 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) static int prepare_script_environment(HINSTANCE hPython)
@ -2254,6 +2263,8 @@ int DoInstall(void)
GetPrivateProfileString("Setup", "user_access_control", "", GetPrivateProfileString("Setup", "user_access_control", "",
user_access_control, sizeof(user_access_control), ini_file); 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. // See if we need to do the Vista UAC magic.
if (strcmp(user_access_control, "force")==0) { if (strcmp(user_access_control, "force")==0) {
if (!MyIsUserAnAdmin()) { if (!MyIsUserAnAdmin()) {