我成功使用System.Diagnostics.Process.Start()在Windows上启动外部单声道可执行文件。然而它在mac上失败了。我没有收到任何错误,根本没有任何错误。
我尝试了以下方式:
System.Diagnostics.Process.Start("mono", "/path/program.exe");
此外,我尝试打开如下所示的终端(也失败了):
System.Diagnostics.Process.Start("Terminal");
我唯一能做的就是以下列方式启动终端:
System.Diagnostics.Process.Start("open", "-a Terminal");
有什么想法吗?我真的很感激任何帮助。
谢谢!
答案 0 :(得分:13)
您需要做的是使用实际可执行文件的完整路径。在OSX上,“apps”实际上是具有.app
扩展名的特殊结构文件夹,可执行文件(通常)位于Content/MacOS/[name]
下。
例如,打开终端:
System.Diagnosticts.Process.Start("/Applications/Utilities/Terminal.app/Contents/MacOS/Terminal");
或者对于TextEdit:
System.Diagnostics.Process.Start("/Applications/TextEdit.app/Contents/MacOS/TextEdit");
要找到可执行文件,您可以右键单击(或按住Control键单击)某个应用程序,然后选择显示包内容,这将打开Finder中的实际文件夹。然后,您可以导航到Contents/MacOS
文件夹以查找实际的可执行文件。
要运行 Mono 可执行文件,您必须使用单声道可执行文件的完整路径并将程序作为参数传递。通常它会像/usr/local/bin/mono
或可能/usr/bin/mono
。
例如:
System.Diagnostics.Process.Start("/usr/bin/local/mono /Users/Ilya/Projects/SomeApp.exe");
显然你会使用.exe
文件的实际路径,上面只是一个例子。
答案 1 :(得分:0)
要扩展Bryan的答案,请不要硬编码代码中的路径/usr/bin/local/
。
要找出每个系统中的正确路径,有各种技术,但我不确定哪个是最好的:
which mono
找到完整路径。为此,您需要从另一个Process实例调用which
。 (不确定所有Mac系统中是否默认which
)/Library/Frameworks/Mono.framework/Versions/Current/bin/pkg-config
(就像它已完成here)。答案 2 :(得分:0)
Mono的一个鲜为人知的功能是你可以直接运行.exe文件(与Windows中的方式兼容,但也是为了方便)。它使用启动原始可执行文件的相同Mono VM启动。换句话说,人们可以做到:
Process.Start("Test.exe");
嗯,至少它在Linux上适用于我;)
修改强>
以下是该功能的source,应该适用于每个平台。