[python-win32] Querying the VNC Service fails sometimes

Mike Driscoll mdriscoll at co.marshall.ia.us
Mon Jun 23 22:07:54 CEST 2008


Roger Upole wrote:
> <div class="moz-text-flowed" style="font-family: -moz-fixed">
> Mike Driscoll wrote:
>> Mike Driscoll wrote:
>>> Hi,
>>>
>>> In one of my login scripts for work, I run a query to see if the VNC
>>> service is running using the win32serviceutil module. The code for
>>> that I am using looks something like this:
>>>
>>> <code>
>>> import win32serviceutil
>>> serviceState = win32serviceutil.QueryServiceStatus('VNC Server')[1]
>>> </code>
>>>
>>> This works in 99.99% of cases. However, I have on user that keeps
>>> getting the following traceback:
>>>
>>> Traceback (most recent call last):
>>>  File "\\ourServer\pathName\PostLogon.py", line 207, in ?
>>>    serviceState = win32serviceutil.QueryServiceStatus('VNC Server')[1]
>>>  File
>>> "\\ourServer\pathName\Python24\lib\site-packages\win32\lib\win32serviceutil.py", 
>>>
>>> line 479, in QueryServiceStatus
>>>    hs = SmartOpenService(hscm, serviceName,
>>> win32service.SERVICE_QUERY_STATUS)
>>>  File
>>> "\\ourServer\pathName\Python24\lib\site-packages\win32\lib\win32serviceutil.py", 
>>>
>>> line 81, in SmartOpenService
>>>    name = _GetServiceShortName(name)
>>>  File
>>> "\\ourServer\pathName\Python24\lib\site-packages\win32\lib\win32serviceutil.py", 
>>>
>>> line 62, in _GetServiceShortName
>>>    skey = win32api.RegOpenKey(hkey, svc, 0, access)
>>> error: (2, 'RegOpenKeyEx', 'The system cannot find the file 
>>> specified.')
>>>
>>>
>>> I used regmon to try and figure out what part of the Registry my code
>>> looks at and it appears to be looking for the "DisplayName" value in
>>> HKLM\SYSTEM\CurrentControlSet\Services\winvnc
>>>
>>> I cannot see a difference in this user's registry versus my own, which
>>> does not have this issue. However, I can duplicate the error by
>>> connecting to the user's PC's registry using the _winreg module and
>>> querying the "DisplayName" value, like this:
>>>
>>> QueryValue(key, 'DisplayName')
>>>
>>> Which give me this traceback:
>>>
>>> Traceback (most recent call last):
>>>  File "<pyshell#14>", line 1, in <module>
>>>    QueryValue(key, 'DisplayName')
>>> WindowsError: [Error 2] The system cannot find the file specified
>>>
>>> But if I use use _winreg's EnumValue, I get this:
>>>
>>>>>> EnumValue(key, 4)
>>> ('DisplayName', u'VNC Server', 1)
>>>
>>> What the!? Does anyone have any suggestions? Maybe a better way to get
>>> the information? I only need to know if the service is running or not,
>>> and if not, to start it.
>>>
>>> Thanks!
>>>
>>>
>>
>> I forgot to mention that we use Windows XP, Python 2.4 and PyWin32
>> version 210.
>>
>> Mike
>
> You might want to try build 211.  It uses the API function
> GetServiceKeyName instead of manually enumerating the
> registry.

That's good to know.

>
> However, it sounds like you could have a corrupt registry key.
> Try reinstalling the service and see if that helps.
>
>         Roger
>
>
> </div>

I keep forgetting that registry keys can get corrupt. I'll try that if 
the 211 idea doesn't work and then I'll give the WMI solution of 
Golden's a go.

Mike



More information about the python-win32 mailing list