java - 创建运行java的cmd进程

标签 java c# process

在我的 C# 代码中

 processInfo = new ProcessStartInfo("do.cmd");
 processInfo.CreateNoWindow = false;
 processInfo.UseShellExecute = false;

在我的 do.cmd 中我有

@echo off
set CONFIG_FILE=./some.properties
set DEFCONFIG_FILE=./more.properties
set EDA_ARGS=-config %CONFIG_FILE% -defaultconfig %DEFCONFIG_FILE%
set JAVA_ARGS=-Xmx256M
set BOOTCLASSPATH=../lib/1.jar;../lib/2.jar;../lib/3.jar;../4.jar;../5.jar
:run_erp
java -Xbootclasspath/p:%BOOTCLASSPATH% %JAVA_ARGS% -jar ../lib/RUNME.jar %EDA_ARGS%
goto end
:end

我收到无法找到 RUNME.jar 的错误,但是如果我在命令提示符下手动运行 do.cmd,它就可以正常工作。但是如果我在 c# 中创建一个进程并运行它,我会收到上面的错误。

所以我的问题是如何在 C# 中运行 cmd 相当于在 cmd 提示符中运行它?

最佳答案

我通过做三件事解决了这个问题。

  1. 更改对象创建以仅包含命令(因为我设置了工作目录)

    processInfo = new ProcessStartInfo("do.cmd");
    
  2. 将工作目录设置为我的 do.cmd 所在位置

    processInfo.WorkingDirectory = Directory.GetCurrentDirectory() + $"\\somedir\\bin\\";
    
  3. UseShellExecute 设置为 true:

    processInfo.UseShellExecute = true;
    

关于java - 创建运行java的cmd进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41268808/

相关文章:

c# - 新的 MVC View ,每次都会出现 404,即使使用正确的 Controller

c# - 从 C# 打开 Google Chrome 的新窗口

c++ - 使用 C++ 在 32 位 Linux 中查找进程可用的剩余内存

java - 通过签名报告运行 Android 应用程序时出错

java - 正则表达式:如果在字符串中找到另一个字符,则只允许一个字符

java - 从 utf8 格式的网站获取内容

c# - 这怎么不会在Silverlight中引起跨线程异常?

java - Java 中的递归搜索

c# - 在 Service Fabric 服务中使用 HttpClient.GetAsync 会引发 "unable to connect to remote service"异常

java - 从 Windows 使用 ProcessBuilder 执行命令