Ошибка "DllRegitserServer not found" для python_com_server

Вот мой код для com сервера (имя файла "python_com_server.py"):

 import pythoncom, win32com.server.register
 import win32traceutil
 class Python_COM_Server_4:
    _public_methods_ = ['MachineInfo']
    _reg_progid_ = "PythonCOMServer_4"
    _reg_clsid_ = '{3B4B18D9-BE2C-43A5-B08C-A89B4334DFA1}'

    def MachineInfo(self, item=None):
        msg = "Your operating system: " 
        print (msg)

if __name__ == '__main__' or __name__ == 'python_com_server':
    win32com.server.register.UseCommandLine (Python_COM_Server_4)

и вот мой setup.py:

from distutils.core import setup
import py2exe
import sys

class Target:
    def __init__(self, **kw):
        self.__dict__.update(kw)
        # for the version info resources (Properties -- Version)
        self.version = "0.0.1"
        self.company_name = "my company"
        self.name = "my com server name"

my_com_server_target = Target(
    description = "my com server",
    # use module name for win32com exe/dll server
    modules = ["python_com_server"],
    # specify which type of com server you want (exe and/or dll)
    create_exe = True,
    create_dll = False
    )

setup(
    name="my_com_server",
    # the following two parameters embed support files within exe/dll file
    options={"py2exe": {"bundle_files": 1, }},
    zipfile=None,
    version="0.0.1",
    description="my com server",
    # author, maintainer, contact go here:
    author="First Last",
    author_email="some_name@some_company.com",
    # packages=["dir"],
    com_server=[my_com_server_target]
    )

Я запускаю следующую команду в строке cmd:

python setup.py py2exe

и он генерирует " python_com_server.exe" в папке dist.

Затем я пытаюсь зарегистрировать его с помощью:

regsvr32 dist\python_com_server.exe

но я получаю эту ошибку:

"Модуль"dist\pythion_com_server.exe"был загружен, но точка входа DllRegisterServer не найдена.

Я использую Python 2.7 32 бит на Windows Server 2012.

Что мне не хватает?

1 ответ

Решение

Чтобы зарегистрировать COM-сервер в.exe, вместо использования RegSvr32.exe, выполните саму.exe с параметром /regserver, как этот.

python_com_server.exe /regserver

RegSvr32.exe - это инструмент для регистрации COM-серверов.dll и.ocx.
DllRegisterServer/DllUnregsiterServer и т. Д. Является точкой входа для этого, COM-серверы.dll и.ocx должны иметь их.

С другой стороны, COM-сервер.exe должен зарегистрироваться со своим собственным кодом.
Поскольку COM-сервер.exe не имеет DllRegisterServer/DllUnregsiterServer и т. Д., Попытка регистрации с использованием RegSvr32.exe не удалась.

Например, в MFC VC ++ это выполняется UpdateRejistry() или UpdateRegistryAll() в InitInstance().exe.

В Win32com Python он соответствует написанному вами "win32com.server.register.UseCommandLine()".

Функция ctypes имеет ту же функцию, и в разделе "Основная программа" приведено объяснение этой реализации COM-сервера с ctypes.

Другие вопросы по тегам