Получите доступ к пользовательской.NET DLL в VBScript

В GKE нет поддержки IPVS. Вы можете создать свой собственный кластер, используя экземпляры Google Compute Engine, и изменять каждый аспект вашего кластера по своему усмотрению. Вы можете использовать Kubeadm или даже обратиться к хранилищу Kubernetes The Hard Way от Kelsey Hightower.

6
задан bluish 19 October 2012 в 09:51
поделиться

5 ответов

Можно зарегистрировать ту.NET dll в regasm утилите путем определения /codebase параметр. Этот параметр не поощряется использовать с неподписанными блоками, но он работает, когда Вы не можете поместить свой блок в GAC.

regasm your.dll /codebase

Обратите внимание на то, что Вы не должны изменять путь своего .dll после этой операции, так как это вставляет этот путь к реестру Windows.

5
ответ дан 8 December 2019 в 03:40
поделиться

ответ huseyint был на деньгах, однако, я хотел добавить немного к нему. Вот некоторый код кода, который я использовал для этой самой проблемы, возможно, это может ускорить Вас вперед...

// bind a variabe to WScript.Shell
Set WshShell = CreateObject("WScript.Shell")

// define the path to the regasm.exe file
RegAsmPath = "c:\Windows\Microsoft.NET\Framework\v2.0.50727\RegAsm.exe"

// register the dll
WshShell.run "cmd /c " & RegAsmPath & " c:\temp\cbsecurity.dll /codebase /nologo /s", 0, True

// bind a variable to the dll
Set cbUtil = CreateObject("CBSecurity.Utilities")

Я включал метод IsAlive в dll...

Public Function IsAlive() As Boolean
    Return True
End Function

... и мог проверить, что это зарегистрировало правильно использование синтаксиса:

//check if dll is available to your code
msgbox "cbUtil is alive: " & cbUtil.IsAlive

Надежда это помогает кому-то...

6
ответ дан 8 December 2019 в 03:40
поделиться

Не непосредственно. Вам будет нужна Обертка для COM-вызовов к любой библиотеке.NET, которую Вы будете, называя от COM (и следовательно, VBScript). Поэтому необходимо или непосредственно создать CCW к DLL, или можно создать CCW для DLL прокси, который обеспечивает общие методы загрузить DLL.NET и предоставить методы Вам, которые называют фактические методы на компоненте и возвращают результат. Это действительно не чисто вообще. Так, в целом ответ нет.

1
ответ дан 8 December 2019 в 03:40
поделиться

Мне просто пришлось сделать это самому, мои выводы были следующие:

Делаем типы видимыми для COM:

  1. Убедитесь, что ваш класс является общедоступным, нестатическим и имеет общедоступный конструктор по умолчанию, т.е. не аргументы.
  2. Убедитесь, что ваш метод является открытым, нестатическим.
  3. Убедитесь, что у вас есть следующий набор в вашей сборке - обычно в AssemblyInfo.cs

      [сборка: ComVisible (true)]
    
  4. После сборки вашей DLL из командной строки SDK запустите:

     regasm yourdll.dll
    

    Это должно ответить:

    Типы успешно зарегистрированы

    Если вы получите

    RegAsm: предупреждение RA0000: Типы не были зарегистрированы

    , тогда вам нужно установить ComVisible или не иметь общедоступных , нестатические типы.

Из PowerShell

$a = New-Object -comobject Your.Utils.Logging
$a.WriteError2("Application", "hello",1,1)

Из vbs

Set logger = CreateObject("Your.Utils.Logging")
logger.WriteError2 "Application", "hello from vbs",1,1 
12
ответ дан 8 December 2019 в 03:40
поделиться

На случай, если кому-то понадобится отладить / пошагово- в .Net dll, которая вызывается только из VBScript:

  1. На экране настройки отладки проекта .Net dll установите «запуск внешней программы», перейдя к программе wscript.exe (расположенной в C: \ WINDOWS \ system32 \ wscript .EXE).

  2. В «Аргументах командной строки» установите имя файла и путь к файлу VBScript (C: \ Test \ myTest.vbs). Убедитесь, что файл vbs и файл dll находятся в одном месте.

  3. Наконец, в исходном коде DLL проекта .Net просто установите точку останова и нажмите «начать отладку»

4
ответ дан 8 December 2019 в 03:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: