Я пытаюсь настроить COM-сервер без прав администратора, чтобы я мог запустить надстройку Word, которая взаимодействует с интерпретатором Python.Проблема возникает, когда я назначаю объекты IPictureDisp python во время его запуска на локальном сервере.
Регистрация надстройки как InProcServer32 работает, но обнаруженный мной код, который регистрирует надстройку как InProcServer, требует повышения прав (права администратора).Поскольку мне нужно, чтобы это выполнялось без прав администратора, я использовал приведенное ниже решение для запуска COM в качестве локального сервера.
def RegisterClass(cls):
file = sys.modules[cls.__module__].__file__
folder = os.path.dirname(file)
module = os.path.splitext(os.path.basename(file))[0]
python = win32com.server.register._find_localserver_exe(1)
python = win32api.GetShortPathName(python)
server = win32com.server.register._find_localserver_module()
command = '%s "%s" %s' % (python, server, cls._reg_clsid_)
typename = module + "." + cls.__name__
def write(path, value):
win32api.RegSetValue(win32con.HKEY_CURRENT_USER, path, win32con.REG_SZ, value)
write("SOFTWARE\\Classes\\" + cls._reg_progid_ + '\\CLSID', cls._reg_clsid_)
write("SOFTWARE\\Classes\\AppID\\" + cls._reg_clsid_, cls._reg_progid_)
write("SOFTWARE\\Classes\\CLSID\\" + cls._reg_clsid_, cls._reg_desc_)
write("SOFTWARE\\Classes\\CLSID\\" + cls._reg_clsid_ + '\\LocalServer32', command)
write("SOFTWARE\\Classes\\CLSID\\" + cls._reg_clsid_ + '\\ProgID', cls._reg_progid_)
write("SOFTWARE\\Classes\\CLSID\\" + cls._reg_clsid_ + '\\PythonCOMPath', folder)
write("SOFTWARE\\Classes\\CLSID\\" + cls._reg_clsid_ + '\\PythonCOM', typename)
write("SOFTWARE\\Classes\\CLSID\\" + cls._reg_clsid_ + '\\Debugging', "0")
Но при запуске локального сервера вместо получения объекта COM для объектов IPictureDisp я получаю сообщениеговоря "Ошибка автоматизации: катастрофический сбой" из Word.
Можно ли запустить InProcServer только для текущего пользователя (без администратора) или заставить объекты IPictureDisp работать на LocalServer32?