2016-08-26 14 views
0

Я пытаюсь сделать import Код Python в VBA.Python COM-сервер с VBA поздним приемом + скипом win register (нет прав администратора)

Код ниже работает, но требует прав администратора. Есть ли способ обойти регистраторную потребность (предположим, что у меня просто нет прав администратора), но сохраняйте поведение «позднего ожидания» (не хотите, чтобы Инструменты >> Ссылка каждый раз, когда я скомпилировал что-то новое)

class ProofOfConcept(object): 
    def __init__(self): 
     self.output = [] 

    def GetData(self): 
     with open('C:\Users\MyPath\Documents\COMs\SourceData.txt') as FileObj: 
      for line in FileObj: 
       self.output.append(line) 
      return self.output 

class COMProofOfConcept(object): 
    _reg_clsid_ = "{D25A5B2A-9544-4C07-8077-DB3611BE63E7}" 
    _reg_progid_= 'RiskTools.ProofOfConcept' 
    _public_methods_ = ['GetData'] 

def __init__(self): 
    self.__ProofOfConcept = ProofOfConcept() 

def GetData(self): 
    return self.__ProofOfConcept.GetData() 

if __name__=='__main__': 
    print "Registering COM server..." 
    import win32com.server.register 
    win32com.server.register.UseCommandLine(COMProofOfConcept) 

VBA код, который вызывает его:

Sub TestProofOfConcept() 
    Set PoF = CreateObject("RiskTools.ProofOfConcept") 
    x = PoF.GetData() 
    MsgBox x(0) 
End Sub 

ответ

3

Короче говоря, нет. В среде исполнения VBA в основном используется COM API CoGetClassObject под капотом - функция CreateObject() по существу является лишь тонкой оболочкой вокруг нее (она вызывает CLSIDFromString, чтобы сначала найти CLSID из параметра). Обе эти функции требуют, чтобы класс был зарегистрирован.

 Смежные вопросы

  • Нет связанных вопросов^_^