]> granicus.if.org Git - python/commitdiff
When loading the Python dll to run the postinstall script, try to load
authorThomas Heller <theller@ctypes.org>
Fri, 18 Jun 2004 17:03:38 +0000 (17:03 +0000)
committerThomas Heller <theller@ctypes.org>
Fri, 18 Jun 2004 17:03:38 +0000 (17:03 +0000)
it from the install directory (as reported by the registry) in case it
is not found on the default Loadlibrary search path.

Fixes SF 935091: bdist_winist post-install script fails on non-admin Python

Already backported.

PC/bdist_wininst/install.c

index 64e213ec58bf11f467993ba10d1b1edaf13ee72a..a715528f9ad77c80170ad85f2366df1028524b4c 100644 (file)
@@ -590,6 +590,22 @@ PyMethodDef meth[] = {
        {"message_box", PyMessageBox, METH_VARARGS, NULL},
 };
 
+static HINSTANCE LoadPythonDll(char *fname)
+{
+       char fullpath[_MAX_PATH];
+       LONG size = sizeof(fullpath);
+       HINSTANCE h = LoadLibrary(fname);
+       if (h)
+               return h;
+       if (ERROR_SUCCESS != RegQueryValue(HKEY_CURRENT_USER,
+                                          "SOFTWARE\\Python\\PythonCore\\2.3\\InstallPath",
+                                          fullpath, &size))
+               return NULL;
+       strcat(fullpath, "\\");
+       strcat(fullpath, fname);
+       return LoadLibrary(fullpath);
+}
+
 static int prepare_script_environment(HINSTANCE hPython)
 {
        PyObject *mod;
@@ -715,7 +731,7 @@ static int run_simple_script(char *script)
        freopen(tempname, "a", stderr);
        freopen(tempname, "a", stdout);
 
-       hPython = LoadLibrary (pythondll);
+       hPython = LoadPythonDll(pythondll);
        if (!hPython) {
                set_failure_reason("Can't load Python for pre-install script");
                return -1;
@@ -1745,7 +1761,7 @@ InstallFilesDlgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
                                                "Compiling files to .pyc...");
 
                                SetDlgItemText(hDialog, IDC_INFO, "Loading python...");
-                               hPython = LoadLibrary(pythondll);
+                               hPython = LoadPythonDll(pythondll);
                                if (hPython) {
                                        errors = compile_filelist(hPython, FALSE);
                                        FreeLibrary(hPython);
@@ -1764,7 +1780,7 @@ InstallFilesDlgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
                                                "Compiling files to .pyo...");
 
                                SetDlgItemText(hDialog, IDC_INFO, "Loading python...");
-                               hPython = LoadLibrary(pythondll);
+                               hPython = LoadPythonDll(pythondll);
                                if (hPython) {
                                        errors = compile_filelist(hPython, TRUE);
                                        FreeLibrary(hPython);
@@ -1840,7 +1856,7 @@ FinishedDlgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
 
                        argv[0] = fname;
 
-                       hPython = LoadLibrary(pythondll);
+                       hPython = LoadPythonDll(pythondll);
                        if (hPython) {
                                int result;
                                result = run_installscript(hPython, fname, 2, argv);