[python-win32] Service fails on mapped network drive

Martijn Ras ras at holmes.nl
Mon Mar 15 07:40:59 EST 2004


Heya Folks,

Since i updated my script so it can be run as service, it fails to work 
on files that are located on mapped network drives.

1) Share the root of your drive C.
2) Map the network drive.
3) Create the following three files in the root of your drive C
    Note: Replace the following in the python script files:
    <LOCALHOST> with the name of your machine,
    <SHARE> with the share name you specified in step 1),
    <MAPPEDDRIVE> with the drive you specified in step2).
4) Run 'python execfile_test.py', it will print "dit is een test" three
    times, as expected.
5) Install the service 'python execfile_test_server.py install'.
6) Open the services control panel:
    a) change the logon so the service run under an account that has
       sufficient rights on the mapped network drive.
    b) start the service.
7) Open the EventViewer, select the Application log.
    You'll notice "dit is een test" has been logged twice and the third
    loggin an IOError 'No such file or directory'.

Any suggestions on getting this service functioning one mapped network 
files?

Mazzel,

Martijn.

::::::::::::::
config.txt
::::::::::::::
config = 'dit is een test'

::::::::::::::
execfile_test.py
::::::::::::::
config = {}
execfile('C:\\config.txt', config)
print str(config['config'])

execfile('\\\\<LOCALHOST>\\<SHARE>\\config.txt', config)
print str(config['config'])

execfile('<MAPPEDDRIVE>:\\config.txt', config)
print str(config['config'])

::::::::::::::
execfile_test_server.py
::::::::::::::
import exceptions
import os
import pywintypes
import win32api
import win32con
import win32event
import win32file
import win32pipe
import win32security
import win32service
import win32serviceutil

class execfile_test_server(win32serviceutil.ServiceFramework):
         _svc_name_ = 'execfile_test_server'
         _svc_display_name_ = 'execfile_test_server'

         def __init__(self, args):
                 win32serviceutil.ServiceFramework.__init__(self, args)
                 self.hWaitStop = win32event.CreateEvent(None, 0, 0, None)
                 self.overlapped = pywintypes.OVERLAPPED()
                 self.overlapped.hEvent = 
win32event.CreateEvent(None,0,0,None)
                 self.thread_handles = []

         def SvcStop(self):
                 self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
                 win32event.SetEvent(self.hWaitStop)

         def SvcDoRun(self):
                 import servicemanager
                 # Write an event log record indicating we have started
 
servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE, 
servicemanager.PYS_SERVICE_STARTED, (self._svc_name_, ''))

                 config = {}
                 execfile('C:\\config.txt', config)
                 msg = str(config['config'])
                 servicemanager.LogInfoMsg(msg)

                 execfile('\\\\<LOCALHOST>\\<SHAREDFOLDER>\\config.txt', 
config)
                 msg = str(config['config'])
                 servicemanager.LogInfoMsg(msg)

                 execfile('<SHAREDFOLDER>:\\config.txt', config)
                 msg = str(config['config'])
                 servicemanager.LogInfoMsg(msg)

                 # Write another event log record we have stopped
 
servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE, 
servicemanager.PYS_SERVICE_STOPPED, (self._svc_name_, ''))

if __name__=='__main__':
         win32serviceutil.HandleCommandLine(execfile_test_server)



More information about the Python-win32 mailing list