如何使用 Process.Start API 以单声道启动进程?我最好的猜测是以下(in F#
):
let start (path : string) =
System.Diagnostics.Process.Start("/usr/bin/env", sprintf "mono \"%s\"" path)
这似乎在 linux 中有效,但在 Mono/Windows 中显然不正确。有什么方法可以以编程方式获取单声道可执行文件的位置吗?
事实证明,您基本上可以只Process.Start
使用目标可执行文件路径,无需指定单声道可执行文件。
您可以使用以下注册表项在 Windows 上找到 Mono 的位置
$version = HKLM_LOCAL_MACHINE\Software\Novell\Mono\DefaultCLR
$monoprefix = HKLM_LOCAL_MACHINE\Software\Novell\Mono\$version\SdkInstallRoot
在哪里使用找到的版本来查找单声道前缀。
取自此页面
您可以从现有实例中启动程序集,而不是启动 CLR 的新实例。Microsoft 在此处记录了相关功能:http: //msdn.microsoft.com/en-us/library/yk22e11a%28v=vs.110%29.aspx。Mono 也实现了这一点。
您需要做的是创建一个新的 AppDomain 来为您提供与当前环境隔离的执行环境,在其中加载程序集并执行它。
例子:
var domain = AppDomain.CreateDomain("Foo");
domain.ExecuteAssembly("Bar.exe");