【问题标题】:How can I start a .NET application from Java on Linux, Mac and Windows?如何在 Linux、Mac 和 Windows 上从 Java 启动 .NET 应用程序?
【发布时间】:2011-02-03 17:08:59
【问题描述】:

我想从 Java 环境的上下文中启动一个 .NET 应用程序(与 Mono 兼容)。

我的猜测是,我必须以某种方式确定是否安装了 mono,找到位置并使用 .NET 应用程序路径作为参数启动它。

但是什么是一种稳健的方法呢?还是有更好的办法?

也许我应该澄清一下上下文:Java 部分作为插件在可能交互有限的环境中运行,所以我真的更愿意找到一种不需要配置文件或用户界面的方法。

【问题讨论】:

  • “将单声道执行器的路径作为应用程序中的配置选项”算数吗?
  • 真的希望它是自动的。

标签: java .net mono cross-platform


【解决方案1】:

如果你已经安装了 .net/mono 并且你可以双击 exe 文件并运行它,那么你可以使用Desktop.open()

就这么简单:

Desktop.getDesktop().open(file);

更多详情请看这里:Using the Desktop API in Java SE 6 编辑

我必须在我有一个单声道应用程序的地方启动我的 Linux 机器,这很好用:

class Launch { 
   public static void main( String ... arg ) { 
      new ProcessBuilder("/usr/bin/myapp").start();
   }
}

重复,效果很好!

【讨论】:

  • 这取决于你的单声道安装,在我的 Linux 系统上,你必须调用单声道并将应用程序作为参数传递。
  • :-o 哦,在这种情况下,您只需要:new ProcessBuilder("/path/to/mono", "app").start(); 就是这样。你不能只是猜测它可以安装在哪里。如果您不想使用配置文件,则只需对其进行硬编码。事实上,如果可执行文件在你的 $PATH 中调用 new ProcessBuilder("monoexecutable", "app").start(); 就足够了。你试过了吗?
  • +1 表示如果单声道可执行文件位于 PATH 上,这将是多么简单。这应该优于在 Java 应用程序中使用硬编码路径。
【解决方案2】:

有趣的问题!无论如何,答案并不那么简单

如果您运行的是 Linux

你肯定需要 Mono 来运行 CLR 可执行文件

如果您运行的是 Windows

您可以通过 shell 运行 CLR 可执行文件使用本地 Mono 安装(因为 Mono 也可以在 Windows 上运行),但在 Windows 上运行 Mono 的理由很少

所以,我认为你应该首先检测 Java 中的操作系统(请不要问我如何),然后如果你运行的是 Linux,则找到 Mono。

Mono 的主要可执行文件通常位于/usr/bin,但始终位于$PATH,因此您可以从控制台运行mono Executable.exe。如果你不能在 Java 中运行这样的命令,或者 Mono 不在路径中,那么你需要运行 whereis mono 来获取可执行文件的路径。

没有其他想法。

【讨论】:

  • 不是那么难,mono和.net可执行文件可以用“ProcessBuilder”类运行,看我的回答
  • 是的,但是 Mono 像 Java 一样工作:你必须像 "java -jar App.jar" 一样运行 "mono App.exe",所以这就是为什么他需要 mono 可执行文件的路径
【解决方案3】:

我对 .Net 或 Mono 一无所知,但我会假设,启动 .Net 应用程序与普通应用程序没有太大区别,或者?

用于与环境交互的类是java.lang.Runtime。它还允许您执行命令。 (.exec-methods)

为了构造一个合适的命令,java.lang.System上的各种功能可能会派上用场。

如果此选项不足以满足您特定情况的要求,JNI 可能是您唯一的选择...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-29
    • 2011-09-08
    • 1970-01-01
    • 2018-12-17
    • 2019-02-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多