Как запустить VBScript из другого VBScript, не создавая новый процесс? - PullRequest
0 голосов
/ 23 марта 2020

Я пытаюсь запустить VBScript из другого VBScript без создания нового процесса. Я могу сделать это с помощью Powershell следующим образом:

Основной сценарий:

# some main script code here
"&'$scriptPath'" | Invoke-Expression
# some main script code here

В Powershell вышеуказанная команда запускает код PowerShell внутри $scriptPath, как если бы он был частью сценарий Main, т.е. запуск его в том же процессе.

Я хотел бы добиться этого с помощью VBScript.
Я искал в Интернете и знал о objShell.Run "<scriptPath>", но эта команда выполняет код в <scriptPath> в другом процессе, а не так, как если бы он был частью основного сценария. Также мне известна опция чтения содержимого файла и его запуска, но я предпочитаю, чтобы это было невозможно, если это возможно.

Как этого можно добиться с помощью VBScript?

1 Ответ

0 голосов
/ 24 марта 2020

Вы захотите просмотреть функцию Eval VBScript и операторы Execute и ExecuteGlobal. Например:

Option Explicit

Dim a : a = 8
Dim b : b = 13

' Dynamically inject a new GetSum() Function into this script...
Execute "Function GetSum(ByVal x, ByVal y) : GetSum = x + y : End Function"

' Dynamically call GetSum() with in-script variables and store the result...
Dim result : result = Eval("GetSum(" & CStr(a) & ", " & CStr(b) & ")")

WScript.Echo result

Как видно из приведенного выше, строки выполняются и анализируются в процессе без запуска отдельного процесса или чтения отдельного файла.

Для будущих работ по обслуживанию и других читаемые сценарии, я мог бы предложить использовать файл сценариев .wsf, а не .vbs, и поместить более крупные строковые блоки в элементы <resource id="x">...</resource>, а затем прочитать строки с помощью getResource("x")

Надеюсь, эта информация поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...