【问题标题】:Starting a Mono Process Programmatically以编程方式启动 Mono 进程
【发布时间】:2013-09-10 11:05:47
【问题描述】:

如何使用 Process.Start API 以单声道方式启动进程?我的最佳猜测如下(F#):

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

这似乎在 linux 中有效,但在 Mono/Windows 中显然不正确。有什么方法可以通过编程方式获取单声道可执行文件的位置?

【问题讨论】:

    标签: f# mono


    【解决方案1】:

    事实证明,您基本上只需Process.Start 只需目标可执行文件路径即可,无需指定单声道可执行文件。

    【讨论】:

      【解决方案2】:

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

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

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

      取自this page

      【讨论】:

      • 谢谢!不过,我想知道是否有一种独立于平台的方式来解析路径。
      【解决方案3】:

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

      【讨论】:

      • 谢谢,但我特意要启动一个单独的进程。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-25
      • 1970-01-01
      • 2012-09-22
      • 1970-01-01
      • 1970-01-01
      • 2013-03-10
      • 1970-01-01
      相关资源
      最近更新 更多