【问题标题】:How to execute a Java app with arguments in c#如何在 C# 中使用参数执行 Java 应用程序
【发布时间】:2013-12-20 01:52:20
【问题描述】:

我自己研究并尝试过这样做,但没有运气。我正在尝试执行一个 java 应用程序并传递一些变量。它正在查找 java 并运行它,但没有传递任何变量,这是我到目前为止所拥有的 -

Process proc = new Process();
        ProcessStartInfo startInfo = new ProcessStartInfo();
        startInfo.Arguments = @"-jar javaapp.jar" + "host:port" +     "password" + "/say" + "test";
        startInfo.FileName = "java";
        proc.StartInfo = startInfo;
        proc.Start();

我根本无法解决这个问题。我不想使用任何第三方软件(除非它可以打包在 .EXE 中),因为这是为了分发给需要它的人。感谢任何帮助。

【问题讨论】:

  • 您是否尝试在连接 startInfo.Arguments 字符串时插入空格(如@"-jar javaapp.jar[space]")?更好的输出 startInfo.Argument 用于调试,看看你得到了什么。
  • @L.B 我没有尝试过这样做,但我认为问题在于参数被应用于 java.exe,而不是应用程序本身。
  • 然后在做出假设之前尝试..

标签: c# java command arguments


【解决方案1】:

您需要在要连接的字符串中添加空格,您的命令当前看起来像

java -jar javaapp.jarhost:portpassword/saytest

最简单的方法是使用string.Format

string command1 = "/say"
string command2 = "test"
string args = string.Format("-jar javaapp.jar {0}:{1} {2} {3} {4}", host, port, password, command1, command2);
startInfo.Arguments = args;

【讨论】:

  • 参数的顺序是 ,它们在这里的顺序是错误的,我不太了解这个来修复它。跨度>
  • @therimmer96 所以你说你无法修复订单?
  • @therimmer96 - 我已经更新了答案。您可以使用字符串连接而不是string.Format,尽管问题似乎是您没有在参数字符串中使用空格分隔参数。您可以编写一个小型测试应用程序,打印其参数并调用它以查看参数是如何从您的代码中传递的。
  • @L.B 我是,因为我最近才开始学习 C#,而其中的“:”让我感到厌烦,让我感到困惑。现在他改变了它,我明白了很多。但它仍然没有将参数传递给 java.lang.它会打开窗口,但之后会很快关闭
  • @Lee 好的,现在可以了,我才发现我设置的command1不是一个有效的,这个问题现在解决了
【解决方案2】:

参数是一个字符串——按照你的方式,它们将被混合在一起,没有空格分隔它们。

C#中的@符号用于字符串的文字格式;看起来你正试图用它来构建一个数组或其他东西。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-18
    • 1970-01-01
    • 2014-02-26
    • 2012-09-07
    • 2013-01-13
    • 2021-10-20
    • 2013-01-19
    相关资源
    最近更新 更多