Какое максимальное количество аргументов может быть передано в Runtime.exec ()? - PullRequest
1 голос
/ 09 июля 2019

Я пытаюсь передать большое количество аргументов Runtime.().exec:

Runtime.getRuntime().exec(new String[] { executable, script, fnamePath, blah, blah, .... });

И скрипт после добавления 12-го аргумента говорит:

Ошибка: нижний индекс вне диапазона
Код: 800A0009

Подскажите, пожалуйста, как лучше всего передать массовые аргументы ? Или, пожалуйста, исправьте мой метод, чтобы получить массовые аргументы.

Пожалуйста, дайте мне знать, если потребуется дополнительная информация ...

VBS код:

Set objOutlook = CreateObject("Outlook.Application")
'Set objNameSpace = objOutlook.GetNamespace("MAPI")
Set myMail = objOutlook.CreateItem(0)
Set Arg = WScript.Arguments
myMail.Attachments.Add Arg(0) 'Just to let you know I'm using the Arg(0) as well
IMED = Arg(1)
URL = Arg(2)
dashLoad = Arg(3)
roles = Arg(4)
consent = Arg(5)
dash = Arg(6)
servMenu = Arg(7)
folowUp = Arg(8)
servReq = Arg(9)
SRN = Arg(10)
PoP = Arg(11)
Doc = Arg(12)
SalesDashLoad = Arg(13)
MsgBox (SalesDashLoad) ' THIS LINE gives me error, till Agr(12) works fine!

Выполнение выше VBS в Java: Runtime Method in Java

Результирующая ошибка msg:

VBS Error

Ответы [ 2 ]

1 голос
/ 10 июля 2019

Нет ограничений на количество передаваемых аргументов, но это не проблема.

Вы должны помнить, что Java-вызов Runtime.getRuntime().exec() сначала запускает исполняемый файл VBScript Hosted (может бытьcscript.exe или wscript.exe) и передача пути к файлу сценария для выполнения, он принимает два аргумента в массиве команд, который вы отправляете на exec().

На снимке экрана после executableи script аргументы массива команд. Я вижу только 13 передаваемых аргументов, но VBScript ожидает 14 (WshArguments коллекция объектов использует индекс, начинающийся с нуля) .

As @Yuanyo упоминает выше вы пропускаете SalesDashload из передаваемого списка аргументов, делая его 14-м аргументом, который отобразит его на Arg(13) в VBScript.

Исправленный ввод будет чем-токак (очевидно, я не знаю, как называются ваши переменные, я могу только догадываться или делать выводы на основе ваших существующих) ;

Runtime.getRuntime().exec(new String[] {executable, script, fnamePath, loginScr1, stLink1, dashLoad1, role1, consent1, dash1, servMenu1, followUp1, servReq1, SRN1, PoP1, docSubmit1, salesDashLoad1 });

Вы могли бы захватить это в VBScript, используяArg.Count проверитьперед продолжением сценария у вас было 14 аргументов, и, возможно, выдает ошибку , если вы этого не делаете, или выходите из сценария.

Dim objOutlook, myMail, Arg
Const ExpectArgCount = 14
Set objOutlook = CreateObject("Outlook.Application")
'Set objNameSpace = objOutlook.GetNamespace("MAPI")
Set myMail = objOutlook.CreateItem(0)
Set Arg = WScript.Arguments

If Arg.Count = ExpectArgCount Then
  myMail.Attachments.Add Arg(0)
  IMED = Arg(1)
  URL = Arg(2)
  dashLoad = Arg(3)
  roles = Arg(4)
  consent = Arg(5)
  dash = Arg(6)
  servMenu = Arg(7)
  folowUp = Arg(8)
  servReq = Arg(9)
  SRN = Arg(10)
  PoP = Arg(11)
  Doc = Arg(12)
  SalesDashLoad = Arg(13)
  MsgBox (SalesDashLoad)
Else
  Call Err.Raise(vbObjectError + 1, "My Application", "Incorrect number of arguments passed")
End If
0 голосов
/ 09 июля 2019

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

У вас должно быть что-то вроде: Runtime.getRuntime().exec(new String[] {executable, script, fnamePath, loginScr1, stLink1, dashLoad1, role1, consent1, servMenu1, followUp1, servReq1, SRN1, PoP1, docSubmit1, salesDLoad1});

Свойство Arguments содержит объект WshArguments (набор аргументов). Используйте нулевой индекс для извлечения отдельных аргументов из этой коллекции.

Вы можете прочитать больше здесь: https://docs.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/windows-scripting/z2b05k8s(v=vs.84)

...