以编程方式启动单声道进程

时间:2013-09-10 11:05:47

标签: f# mono

如何使用Process.Start API以单声道启动流程?我最好的猜测是以下(F#):

let start (path : string) = 
    System.Diagnostics.Process.Start("/usr/bin/env", sprintf "mono \"%s\"" path)

这似乎适用于linux,但在Mono / Windows中显然不正确。有没有办法以编程方式获取单声道可执行文件的位置?

3 个答案:

答案 0 :(得分:1)

事实证明,你只需要Process.Start只需要目标可执行路径,而不需要指定单声道可执行文件。

答案 1 :(得分:0)

您可以使用以下注册表项在Windows上找到Mono的位置

$version = HKLM_LOCAL_MACHINE\Software\Novell\Mono\DefaultCLR
$monoprefix = HKLM_LOCAL_MACHINE\Software\Novell\Mono\$version\SdkInstallRoot

您使用找到的版本找到单声道前缀。

取自this page

答案 2 :(得分:0)

您可以从现有实例中启动程序集,而不是启动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");