Hi Matteo, Thanks for the suggestions. I have integrated the win32trace module into my frozen app. Here is my final code:
from quickwho_main import quickwhoApp import time import tempfile from win32com.server.exception import COMException import winerror import win32com.server.register import win32traceutil import sys sys.stdout = open('C:/Users/Kevin/Desktop/my_stdout.log', 'w') sys.stderr = open('C:/Users/Kevin/Desktop/my_stderr.log', 'w') #expose basic functionality to COM class QuickWho_Domain: _public_methods_ = ['GetDomain'] _reg_progid_ = 'QuickWho.Application' _reg_clsid_= '{9F825846-F10B-47DD-91E8-88DA93C1A05E}' def GetDomain(self, domain): try: app.searchfield.delete(0, 'end') app.searchfield.insert(0, str(domain)) app.getInfo() time.sleep(1) alltext=app.getData() tempfile = tempfile.gettempdir()+ '/urltext.txt' data = open(tempfile, 'r') finaltext = data.read() data.close() return finaltext except Exception ,ex: exMsg='Unable to retrieve domain data '+str(ex) raise COMException(desc=exMsg, scode=winerror.E_FAIL) print "*"*20 import win32com.server.register sys.argv.append('--debug') win32com.server.register.UseCommandLine(QuickWho_Domain) print "*"*20 try: app = quickwhoApp(None) app.mainloop() except Exception ,ex: print "error !! " + str(ex) (I put the code into a frozen app because it isn’t practical to debug the app itself when run as a Python module—it won’t be deployed that way.) I did get some debugging output, though not what I expected: Exception in Tkinter callback Traceback (most recent call last): File "Tkinter.pyc", line 1410, in __call__ File "quickwho_main.pyc", line 159, in <lambda> File "quickwho_main.pyc", line 253, in getInfo File "subprocess.pyc", line 537, in check_output File "subprocess.pyc", line 672, in __init__ File "subprocess.pyc", line 784, in _get_handles File "subprocess.pyc", line 823, in _make_inheritable WindowsError: [Error 6] The handle is invalid This appears to be related to the bug logged at http://bugs.python.org/issue3905. My app makes use of subprocess to obtain various bits of data that it then parses and displays in its UI. For what it’s worth, injecting the trace module into my frozen app causes no output to appear at all in the app itself, and returns the error above; the trace module seems to trigger the suprocess bug. However, it seems to have no bearing at all on the failure of VBScript to create a COM object from my application, and the debugging output logged to my stdout/stderr file did not yield any insight on that. I investigated whether running the mainloop() in the app might interfere with the application receiving the COM request from the Windows Script Host, but commenting out the mainloop only caused the app to crash (since Tkinter apps require a mainloop to run). The bottom line of all this investigation is that I am no closer to understanding why my Tkinter app does not respond to the CreateObject request from VBS. It appears that those requests simply disappear into a black hole. It also appears that integrating a GUI toolkit with its own event loop in Python may not be very practical with a COM server (see http://trac.wxwidgets.org/ticket/12105 for some other issues with wxPython and COM). Unfortunately, this means my best option is probably to move ahead without COM support. Thanks again for your help. --Kevin
_______________________________________________ python-win32 mailing list python-win32@python.org http://mail.python.org/mailman/listinfo/python-win32