我成功地使用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");
有任何想法吗? 我真的很感激任何帮助。
谢谢!
什么,你需要做的是使用完整路径到实际的可执行文件。 在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
文件,上面只是一个例子。
为了扩大对布莱恩的回答,请不要硬编码路径/usr/bin/local/
在你的代码。
要了解每个系统的正确路径,有各种各样的技术,但我不知道这是最好的一个:
- 使用
which mono
定位的完整路径。 为此,您需要调用which
从另一个流程实例。 (不知道是否which
配备的缺省在所有的Mac系统) - 使用pkg配置,以确定在安装单前缀。 但要注意,你不能简单地调用系统的pkg配置,你必须先检查单的pkg配置存在。 对于这一点,你需要检查,如果该硬编码路径存在:
/Library/Frameworks/Mono.framework/Versions/Current/bin/pkg-config
(就像是做在这里 )。
单声道的鲜为人知的特点是,你可以直接运行.exe文件(为了与它是如何在Windows中完成的,而且为了方便兼容)。 它使用相同的单声道VM启动该原始可执行启动。 换言之可以简单地这样做:
Process.Start("Test.exe");
好吧,至少它为我的作品在Linux上;)
编辑:
这里的源该功能,应在每个平台上工作。