【问题标题】:Cannot run program "...": CreateProcess error=2无法运行程序“...”:CreateProcess 错误=2
【发布时间】:2015-09-02 17:37:57
【问题描述】:

我正在尝试用 java 执行一个 cmd 命令,但是为什么这个命令不起作用?当我在 windows cmd 中尝试它时它可以工作,但是当我想用 Java 执行它时,它就不起作用了。

String cmd = "cd "+System.getenv("APPDATA")+"\\.minecraft"
Process pc = Runtime.getRuntime().exec(cmds);

你知道为什么吗?

//编辑: 错误信息:

java.io.IOException: 无法运行程序 "cd C:\Users\Adrian\AppData\Roaming.minecraft": CreateProcess error=2, File not found... 在 java.lang.ProcessBuilder.start(未知来源) 在 java.lang.Runtime.exec(未知来源) 在 java.lang.Runtime.exec(未知来源) 在 at.freakey.thundriallauncheerr.Launcher$SwingAction.actionPerformed(Launcher.java:313) 在 javax.swing.AbstractButton.fireActionPerformed(未知来源) 在 javax.swing.AbstractButton$Handler.actionPerformed(未知来源) 在 javax.swing.DefaultButtonModel.fireActionPerformed(未知来源) 在 javax.swing.DefaultButtonModel.setPressed(未知来源) 在 javax.swing.plaf.basic.BasicButtonListener.mouseReleased(未知来源) 在 java.awt.AWTEventMulticaster.mouseReleased(未知来源) 在 java.awt.Component.processMouseEvent(未知来源) 在 javax.swing.JComponent.processMouseEvent(未知来源) 在 java.awt.Component.processEvent(未知来源) 在 java.awt.Container.processEvent(未知来源) 在 java.awt.Component.dispatchEventImpl(未知来源) 在 java.awt.Container.dispatchEventImpl(未知来源) 在 java.awt.Component.dispatchEvent(未知来源) 在 java.awt.LightweightDispatcher.retargetMouseEvent(未知来源) 在 java.awt.LightweightDispatcher.processMouseEvent(未知来源) 在 java.awt.LightweightDispatcher.dispatchEvent(未知来源) 在 java.awt.Container.dispatchEventImpl(未知来源) 在 java.awt.Window.dispatchEventImpl(未知来源) 在 java.awt.Component.dispatchEvent(未知来源) 在 java.awt.EventQueue.dispatchEventImpl(未知来源) 在 java.awt.EventQueue.access$500(未知来源) 在 java.awt.EventQueue$3.run(未知来源) 在 java.awt.EventQueue$3.run(未知来源) 在 java.security.AccessController.doPrivileged(本机方法) 在 java.security.ProtectionDomain$1.doIntersectionPrivilege(未知来源) 在 java.security.ProtectionDomain$1.doIntersectionPrivilege(未知来源) 在 java.awt.EventQueue$4.run(未知来源) 在 java.awt.EventQueue$4.run(未知来源) 在 java.security.AccessController.doPrivileged(本机方法) 在 java.security.ProtectionDomain$1.doIntersectionPrivilege(未知来源) 在 java.awt.EventQueue.dispatchEvent(未知来源) 在 java.awt.EventDispatchThread.pumpOneEventForFilters(未知来源) 在 java.awt.EventDispatchThread.pumpEventsForFilter(未知来源) 在 java.awt.EventDispatchThread.pumpEventsForHierarchy(未知来源) 在 java.awt.EventDispatchThread.pumpEvents(未知来源) 在 java.awt.EventDispatchThread.pumpEvents(未知来源) 在 java.awt.EventDispatchThread.run(未知来源) 引起:java.io.IOException: CreateProcess error=2, Das System kann die angegebene Datei nicht finden 在 java.lang.ProcessImpl.create(本机方法) 在 java.lang.ProcessImpl.(未知来源) 在 java.lang.ProcessImpl.start(未知来源) ... 41 更多

【问题讨论】:

  • 用我的总错误日志更新了它。
  • 只有英文版。
  • 现在是英文。你现在能帮帮我吗?
  • 错误很明显,你在那个位置有文件吗?
  • 您在 windows 中运行的确切命令是什么?

标签: java batch-file cmd execute


【解决方案1】:

cd 不是您可以执行的程序。即使你能做到,它什么也做不了。

当您exec 时,将启动一个新进程。这个新进程独立于您的进程(Java 进程),并且有自己的“当前目录”。更改该进程中的当前目录不会影响 Java 进程的当前目录。

cd 是命令行程序cmd.exe 的内置 命令。要运行cd 命令,您需要运行cmd.exe /c cd ...。但正如我刚才所说,这将毫无意义(过程将立即结束)。

至于改变Java进程的当前目录,看这个:Changing the current working directory in Java?

【讨论】:

    【解决方案2】:

    我认为 exec 正在检查文件“cd C:\Users\Adrian\AppData\Roaming.minecraft”是否存在。

    不要执行“cd C:\Users\Adrian\AppData\Roaming.minecraft”,而是使用正确版本的 exec 方法:

    exec(java.lang.String command, java.lang.String[] envp,java.io.File workDir)
    

    例如:

    exec("executablefilename", null, "C:\Users\Adrian\AppData\Roaming.minecraft")
    

    【讨论】:

      猜你喜欢
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-12
      • 1970-01-01
      相关资源
      最近更新 更多