import sys
import string
import os

import pythoncom
pythoncom.frozen = 1

inprocess = getattr(sys, 'frozen', None)

import addin
klasses = (addin.OutlookAddin,)

def DllRegisterServer():
    import win32com.server.register
    win32com.server.register.RegisterClasses(*klasses)
    addin.RegisterAddin(addin.OutlookAddin)
    return 0

def DllUnregisterServer():
    import win32com.server.register
    win32com.server.register.UnregisterClasses(*klasses)
    addin.UnregisterAddin(addin.OutlookAddin)
    return 0

if sys.frozen!="dll":
    import win32com.server.localserver
    for i in range(1, len(sys.argv)):
        arg = string.lower(sys.argv[i])
        if string.find(arg, "/reg") > -1 or string.find(arg, "--reg") > -1:
            DllRegisterServer()
            break

        if string.find(arg, "/unreg") > -1 or string.find(arg, "--unreg") > -1:
            DllUnregisterServer()
            break

        # MS seems to like /automate to run the class factories.
        if string.find(arg, "/automate") > -1:
            clsids = []
            for k in klasses:
                clsids.append(k._reg_clsid_)
            win32com.server.localserver.serve(clsids)
            break
    else:
        # You could do something else useful here.
        import win32api
        win32api.MessageBox(0, "This program hosts a COM Object and\r\nis started automatically", "COM Object")


syntax highlighted by Code2HTML, v. 0.9.1