Я создал python COM-класс для текущего пользователя, чтобы его можно было использовать без прав администратора. Я изменил модуль python win32com.server.register
, чтобы создать реестр только для текущего пользователя вместо всех.
Автономный скрипт работает нормально, и COM-сервер успешно регистрируется. Вот мой сценарий:
import pythoncom, win32com.server.register_current_user
class Python_For_VBS:
_reg_progid_ = 'PythonForVBS.Utilities'
_reg_clsid_ = pythoncom.CreateGuid()
_reg_desc_ = "Python Test COM Server"
_public_methods = ['HelloWorld']
def HelloWorld(self, item=None):
return 'Hello World!'
if __name__ == '__main__':
print('Registering COM server?quo')
win32com.server.register_current_user.UseCommandLine(Python_For_VBS)
Но проблема в том, что я не могу использовать этот класс с VB CreateObject ().
Sub Python_Test
Dim PythonUtils
Dim response
Set PythonUtils = CreateObject("PythonForVBS.Utilities")
response = PythonUtils.HelloWorld()
MsgBox response
End Sub
Может ли VB использовать только классы, определенные для все пользователи? Если нет, то как я могу использовать этот класс из VBScript?
РЕДАКТИРОВАТЬ:
Я использую Python 64-бит, и я запускаю этот VBScript в QlikView. Таким образом, он не показывает никакой ошибки, но скрипт не выполняется, и отладчик указывает на строку, которая вызывает функцию CreateObject (), поэтому я предполагаю, что именно в этом и заключается ошибка.
экспорт реестра из HKEY_CURRENT_USER\Software\Classes\PythonForVBS.Utilities
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Classes\PythonForVBS.Utilities]
[HKEY_CURRENT_USER\Software\Classes\PythonForVBS.Utilities\CLSID]
@="{62F16FCC-730A-4CD4-9249-CE1B683AE423}"
экспорт реестра из HKEY_CURRENT_USER\Software\Classes\CLSIDPythonForVBS.Utilities
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Classes\CLSIDPythonForVBS.Utilities]
@="Python Test COM Server"