使用c#在mac上启动外部进程

问题描述 投票:0回答:3

我成功使用 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");

有什么想法吗?

c# macos mono process.start
3个回答
18
投票

您需要做的是使用实际可执行文件的完整路径。在 OSX 上,“应用程序”实际上是具有

.app
扩展名的特殊结构的文件夹,可执行文件(通常)位于
Content/MacOS/[name]
下。

例如,打开终端:

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

或者对于文本编辑:

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

要找到可执行文件,您可以右键单击(或按住 Control 键单击)应用程序,然后选择“显示包内容”,这将在 Finder 中打开实际文件夹。然后,您可以导航到 Contents/MacOS 文件夹以查找实际的可执行文件。

要运行您的 

Mono

可执行文件,您必须使用 mono 可执行文件的完整路径并将您的程序作为参数传递。通常它会类似于 /usr/local/bin/mono 或可能是

/usr/bin/mono
例如:

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

显然您会使用 
.exe

文件的实际路径,上面只是一个示例。

    


0
投票
不要在代码中硬编码

路径/usr/bin/local/


要找出每个系统中的正确路径,有多种技术,但我不确定哪一种是最好的:

使用
    which mono
  • 定位完整路径。为此,您需要从另一个 Process 实例调用
    which
    。 (不确定
    which
    是否在所有 Mac 系统中默认)
    使用 pkg-config 确定安装 Mono 的前缀。但要注意,你不能简单地调用系统的pkg-config,你必须首先检查mono的pkg-config是否存在。为此,您需要检查此硬编码路径是否存在:
  • /Library/Frameworks/Mono.framework/Versions/Current/bin/pkg-config
  • (就像完成的
    here
    )。

0
投票

Process.Start("Test.exe");

好吧,至少它在 Linux 上对我有用;)

编辑:

这是该功能的

来源

,应该适用于每个平台。

© www.soinside.com 2019 - 2024. All rights reserved.