[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