[python-win32] Running a Windows Python service without pythonservice.exe?
Mark Hammond
skippy.hammond at gmail.com
Tue May 11 03:33:37 CEST 2010
On 10/05/2010 7:08 AM, Bill Janssen wrote:
> A few weeks ago, Mark mentioned that there's now a way to run a Windows
> service without pythonservice.exe.
>
> I'd like to hear more about that. Right now, I'm stuck with my UpLib
> system on Windows. I'd like to be able to install everything in the
> UpLib directory, including a private copy of Python and PyWin32. But
> then there's no way to tell pythonservice.exe where the modules are, and
> so Python services don't start.
>
> I'm thinking the problem is this code in PythonService.cpp:
>
> // Our EXE entry point.
> 1540
> 1541 int _tmain(int argc, TCHAR **argv)
> 1542 {
> 1543 PyObject *module, *f;
> 1544 PyThreadState *threadState;
> 1545 HMODULE hmod;
> 1546 FARPROC proc;
> 1547 Py_Initialize();
> 1548 PyEval_InitThreads();
> 1549 module = PyImport_ImportModule("servicemanager");
> 1550 if (!module) goto failed;
>
> I've got the PyWin32 extensions installed in a private site-packages
> directory under my stuff, which isn't the same as the Python
> site-packages site. I need a way to set PYTHONPATH, or in some other
> way initialize the DLL load path and Python sys.path, before running the
> pythonservice.exe, don't I? Otherwise, this load of "servicemanager"
> will fail (and Py_Initialize() will fail if I don't copy
> pythonservice.exe to the same location as python.exe and python26.dll).
That's correct. Using python.exe as the host will involve having a .py
script which imports the servicemanager module then call
PrepareToHostSingle and instantiate the service class - or something
like that :)
Another alternative is to ship a slightly modified pythonxx.dll - it has
a feature where a certain string resource contains the basename of the
registry key used at runtime to load the pythonpath - eg, you will find
the resource has "2.6" for Python 2.6 builds. Using a resource editor
(or even a script using pywin32) to change this to some custom value
will mean the pythonpath can be loaded from a private key in the
registry, meaning you still get isolation from other installed Python
versions.
HTH,
Mark
>
> Bill
> _______________________________________________
> python-win32 mailing list
> python-win32 at python.org
> http://mail.python.org/mailman/listinfo/python-win32
More information about the python-win32
mailing list