开始用C#在Mac上的外部进程(Start an external process on mac w

2019-08-17 16:27发布

我成功地使用System.Diagnostics.Process.Start()开始在我的窗户外单的可执行文件。 但是它无法在Mac上。 我没有得到任何错误,只是什么都没有发生。

我试着做以下方式:

System.Diagnostics.Process.Start("mono", "/path/program.exe");

此外,我已经试过打开终端类似下面的(这也失败了):

System.Diagnostics.Process.Start("Terminal");

我能够做的唯一的事情就是启动终端通过以下方式:

System.Diagnostics.Process.Start("open", "-a Terminal");

有任何想法吗? 我真的很感激任何帮助。

谢谢!

Answer 1:

什么,你需要做的是使用完整路径到实际的可执行文件。 在OSX上的“应用程序”实际上是用特殊结构的文件夹.app扩展名,可执行文件(通常情况下)下的生活Content/MacOS/[name]

例如,打开终端:

System.Diagnosticts.Process.Start("/Applications/Utilities/Terminal.app/Contents/MacOS/Terminal");

或文字编辑:

System.Diagnostics.Process.Start("/Applications/TextEdit.app/Contents/MacOS/TextEdit");

要找到可执行文件,您可以用鼠标右键单击(或控制单击)一个应用程序,并选择显示包内容 ,这将在Finder中打开实际的文件夹。 然后,您可以浏览到Contents/MacOS文件夹中找到实际的可执行文件。

要运行可执行 ,您必须使用完整路径单可执行文件,并通过你的程序作为参数。 通常它会是这样/usr/local/bin/mono或可能/usr/bin/mono

例如:

System.Diagnostics.Process.Start("/usr/bin/local/mono /Users/Ilya/Projects/SomeApp.exe");

显然,你应该使用实际路径.exe文件,上面只是一个例子。



Answer 2:

为了扩大对布莱恩的回答,请不要硬编码路径/usr/bin/local/在你的代码。

要了解每个系统的正确路径,有各种各样的技术,但我不知道这是最好的一个:

  • 使用which mono定位的完整路径。 为此,您需要调用which从另一个流程实例。 (不知道是否which配备的缺省在所有的Mac系统)
  • 使用pkg配置,以确定在安装单前缀。 但要注意,你不能简单地调用系统的pkg配置,你必须先检查单的pkg配置存在。 对于这一点,你需要检查,如果该硬编码路径存在: /Library/Frameworks/Mono.framework/Versions/Current/bin/pkg-config (就像是做在这里 )。


Answer 3:

单声道的鲜为人知的特点是,你可以直接运行.exe文件(为了与它是如何在Windows中完成的,而且为了方便兼容)。 它使用相同的单声道VM启动该原始可执行启动。 换言之可以简单地这样做:

Process.Start("Test.exe");

好吧,至少它为我的作品在Linux上;)

编辑:

这里的源该功能,应在每个平台上工作。



文章来源: Start an external process on mac with c#