Hi everybody,

I'm having a problem when I try to query a remote (only a
remote )computer using wmi. The python code has been compiled to become a 
windows
service.

I'm planning to query systems that implement the DMTF standard,
WBEM, and for that I need a class that can handle cim-xml protocol and wmi
connections.

The functionalities are accessed through a XML-RPC server which
is run in a separated thread inside the SvcDoRun method. This server has a 
procedure
called Query that is used, obviously, to querie a remote systems or the local 
system.
Inside this procedure I do the pythoncom.CoInitialize and 
pythoncom.CoUninitialize and
in between I use the conection class mentioned above.

The service work
perfect when I query localhost but fails to query any remote machine. I have 
tried
wmitester.exe a tool to test wmi and using the same user and password and 
remote�
machine it works so It is not a permission problem.

I also changed the name
of the module wmi to my_wmi in case there could be a problem with wmi.dll but 
nothing
changes.�The exception is here (__init__ at WBEMConn):

...
self.conn = None
...
try:
��� self.conn =
wmi.WMI(computer = self.host, user = self.user, password = self.password)
��� self.system = "wmi"
except wmi.x_access_denied:
����self.status = "access_denied"
��� return


I have a module for the connection class
(It has been tested outside the service and it works).

import pywbem
import wmi

class WBEMConn:
��� def __init__(self, url,
user, password)
��������� self.url =
url
��������� self.user = user
��������� self.passwd = password
��������� self.conn = None
��������� #--------Here the is attempted
a connection to a system which might be using cim-xml protocol
��������� #--------If fails try wmi.
����������#--------if fails can not
talk cim-xml or wmi
����������
����������
����def�ExecQuery(self,query):
�������� if self.conn is None:
���������������
return�None
�������� if self.system ==
"cim-xml":
������������� result
= self.conn.ExecQuery("wql", query)#----for pywbem
���������else:
��������������
result �= self.conn.query(query)����#---for wmi
���������������

A module that defines a class for the xml-rpc server.

class
ThreadedXMLRPCServer_BasicAuth(ThreadingMixIn, SimpleXMLRPCServer)

class
ServerFunc:
����� def Query(self, url, user, password,
query):
������������� try:
�����������������
pythoncom.CoInitialize()
�������������������������conn
= WBEMConn(url, user, password)
������������������������
result = conn.ExecQuery(query)
��������������
finally:
�����������������������
pythoncom.CoUninitialize()
���������������return
result������������������


The service's SvcDoRun method.

def SvcDoRun(self):
����#-----import�all requiered modules
���� def StartServer():
����������
self.server.serve_forever()
���� self.server =
ThreadedXMLRPCServer_BasicAuth(...)
���� func = ServerFunc()
���� self.server.register_instance(func)
���� StartServer()
���� while
self.running:
����������time.sleep(3)
def
SvcStop(self):
�� ......
�� self.server.shutdown()
�� self.running = False
� .....
����

Thanks a lot,
Boris.









---
Convencion Internacional de Psicologia y Ciencias Sociales y Humanas
Cienfuegos, Cuba, del 19 al 22 de abril del 2011
http://promociondeeventos.sld.cu/hominis2011
_______________________________________________
python-win32 mailing list
python-win32@python.org
http://mail.python.org/mailman/listinfo/python-win32

Reply via email to