gpt4 book ai didi

vba - VBA 中的 Shell 命令不使用 PATH 变量(从 VBA 执行 .jar)

转载 作者:行者123 更新时间:2023-12-04 21:52:39 26 4
gpt4 key购买 nike

在 Word VBA 宏中的 Windows 7(64 位)和 Office 2010 下,我正在制作 Shell调用 java 来执行一个 .jar 文件。该代码是分发的一部分,据说可以在 Office 2007(我没有)中使用。

ShellCommand = "java -classpath ..."
TaskID = Shell(ShellCommand, ShellWindowState)

不管怎样, Shell命令返回一个进程 ID,但进程立即终止,没有 Err.Number我实际上无法获得有关原因的太多信息。

但是,我怀疑它找不到 java命令。我通过手动打开 CMD.exe 来验证我的 PATH 是正确的窗口并运行 ShellCommand (我使用 Debug.Print 打印)。实际上,我的 PATH 变量设置为指向安装最新 JRE 的位置,这也可以通过键入 java -version 来证明。并看到正确的输出。

所以,仍然不信任 Shell在 VBA 中,我对 ShellCommand 进行了硬编码,如下所示:
ShellCommand = "c:\Program Files\Java\jdk1.7.0_72\jre\bin\java -classpath ..."

令我(不)惊讶的是,Shell 命令可以正常工作,并且我的 .jar 已按预期执行。

那么,谁能告诉我为什么系统 PATH变量在 ShellCommand 中被忽略或者,更好的是,我如何编写 VBA 程序,以便每当我在 Windows 7 上更新我的 JRE( java.exe 似乎每隔几周就会移动一个目标),它会找到 java.exe ?

最佳答案

TL;DR:删除 Java 8
我的 Java 安装 list 显示了一些复杂性 (!)

  • Java 7 更新 72
  • Java 7 更新 72(64 位)
  • Java SE 开发工具包 7 更新 72(64 位)
  • Java 8 更新 25
  • PATH第一部分我用 Environ("PATH") 显示的显示 C:\ProgramData\Oracle\Java\javapath这是一组 SYMLINK s 如下:
    C:\ProgramData\Oracle\Java\javapath>dir

    Directory of C:\ProgramData\Oracle\Java\javapath

    2014-10-16 10:32 <DIR> .
    2014-10-16 10:32 <DIR> ..
    2014-10-16 10:32 <SYMLINK> java.exe [C:\Program Files (x86)\Java\jre1.8.0_25\bin\java.exe]
    2014-10-16 10:32 <SYMLINK> javaw.exe [C:\Program Files (x86)\Java\jre1.8.0_25\bin\javaw.exe]
    2014-10-16 10:32 <SYMLINK> javaws.exe [C:\Program Files (x86)\Java\jre1.8.0_25\bin\javaws.exe]
    作为实验,我删除了 Java 8。
    这使 javapath 设置如下(Java 7 64 位):
    C:\ProgramData\Oracle\Java\javapath>dir

    Directory of C:\ProgramData\Oracle\Java\javapath

    2014-10-28 21:14 <DIR> .
    2014-10-28 21:14 <DIR> ..
    2014-10-28 21:14 <SYMLINK> java.exe [C:\Program Files\Java\jre7\bin\java.exe]
    2014-10-28 21:14 <SYMLINK> javaw.exe [C:\Program Files\Java\jre7\bin\javaw.exe]
    2014-10-28 21:14 <SYMLINK> javaws.exe [C:\Program Files\Java\jre7\bin\javaws.exe]
    运行我的 VBA 应用程序现在无需硬编码路径 java.exe .
    我关于 PATH 变量被忽略的假设是错误的。
    我的新假设是 Java 8(32 位)在从 Shell 调用时无法正常工作,因为它在 cmd.exe 中正确执行了 .jar 文件窗口(具有相同的路径)。

    关于vba - VBA 中的 Shell 命令不使用 PATH 变量(从 VBA 执行 .jar),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26620921/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com