Ошибка "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.