Есть ли способ обойти 32-битную версию Java (может быть, другой способ запустить процесс в VBA для вызова 64-битной версии cmd, отключить UAC или какой-либо другой вид твика), который находится "принудительно "с помощью следующего кода VBA (это всего лишь предположение, я объясняю процесс отладки ниже):
handleDbl = Shell("javaw -cp theJar.jar com.java.SampleClass", vbNormalFocus)
Главное здесь заключается в том, что я хочу поделиться своим макросом и не добавлять дополнительные инструкцииполучатель, поэтому я пытаюсь сделать все в коде (я использую позднюю привязку для кода VBA, чтобы избежать установки ссылок вручную и тому подобного).
Процесс отладки
Ошибкабыло выброшено, поэтому я использовал следующую строку:
handleDbl = Shell("cmd /k java -cp theJar.jar com.java.SampleClass", vbNormalFocus)
И получил ошибку Exception in thread "main" java.lang.UnsupportedClassVersionError: Unsupported major.minor version
, поэтому я проверил java -version
и попытался выяснить, с какой java работал:
C:\>where java
C:\Windows\System32\java.exe
C:\Program Files\Java\_anyJava.x.x.x_\bin\java.exe
Я пошел в папку System32
, и там не было Java, но я знал, что оттуда происходит перенаправление на C:\Windows\SysWOW64
, поэтому я сравнил ранее извлеченную версию Java сC:\Windows\SysWOW64\java.exe -version
и они совпали.
После этого я проверил свою версию Outlook и оказался 32-битной установкой.Это был намек, но в основном это был тот самый большой * 32 рядом с cmd.exe в диспетчере задач.Я не знаю, изменится ли 64-битный Outlook или он будет таким же из-за реализации VBA, но я пришел к выводу, что функция Shell из VBA вызывает 32-битный вызов Java.