12345678910111213141516171819202122232425262728293031323334353637383940 |
- # testDCOM
- usage="""\
- testDCOM.py - Simple DCOM test
- Usage: testDCOM.py serverName
- Attempts to start the Python.Interpreter object on the named machine,
- and checks that the object is indeed running remotely.
- Requires the named server be configured to run DCOM (using dcomcnfg.exe),
- and the Python.Interpreter object installed and registered on that machine.
- The Python.Interpreter object must be installed on the local machine,
- but no special DCOM configuration should be necessary.
- """
- # NOTE: If you configured the object locally using dcomcnfg, you could
- # simple use Dispatch rather than DispatchEx.
- import pythoncom, win32com.client, win32api, string, sys
- def test(serverName):
- if string.lower(serverName)==string.lower(win32api.GetComputerName()):
- print("You must specify a remote server name, not the local machine!")
- return
- # Hack to overcome a DCOM limitation. As the Python.Interpreter object
- # is probably installed locally as an InProc object, DCOM seems to ignore
- # all settings, and use the local object.
- clsctx = pythoncom.CLSCTX_SERVER & ~pythoncom.CLSCTX_INPROC_SERVER
- ob = win32com.client.DispatchEx("Python.Interpreter", serverName, clsctx=clsctx)
- ob.Exec("import win32api")
- actualName = ob.Eval("win32api.GetComputerName()")
- if string.lower(serverName) != string.lower(actualName):
- print("Error: The object created on server '%s' reported its name as '%s'" % (serverName, actualName))
- else:
- print("Object created and tested OK on server '%s'" % serverName)
- if __name__=='__main__':
- if len(sys.argv) == 2:
- test(sys.argv[1])
- else:
- print(usage)
|