【问题标题】:Executing a Cygwin process from .NET?从 .NET 执行 Cygwin 进程?
【发布时间】:2009-02-27 16:52:13
【问题描述】:

我正在尝试从 .NET 应用程序启动 Cygwin 版本的 ruby​​.exe,但我被卡住了。

c:\>"c:\cygwin\bin\ruby.exe" c:\test\ruby.rb
/usr/bin/ruby: no such file to load -- ubygems (LoadError)

如您所见,Ruby 无法找到库,因为它正在寻找一些 Linux 风格的路径。

显然,当我从 .NET 运行 ruby​​.exe 时,因为它找不到库,所以它会像上面一样失败。

如果我不加载任何库,它可以正常工作:

c:\>"c:\cygwin\bin\ruby.exe" -v
ruby 1.8.7 (2008-08-11 patchlevel 72) [i386-cygwin]

最初 cygwin 以这个 cygwin.bat 开头

chdir C:\cygwin\bin
bash --login -i

如何让 .NET 先进入 cygwin 环境,然后在该环境中执行 ruby​​?

  • 我不能使用 Windows Ruby,我需要 cygwin ruby​​。
  • 我知道交互式驱动“bash”的潜在用途,但这听起来很脏,除非有很好的方法。

【问题讨论】:

    标签: c# .net ruby process cygwin


    【解决方案1】:

    您是否正在混合使用本机 Windows ruby​​gems 和 Cygwin ruby​​?使用 Cygwin ruby​​gems 似乎对我来说很好用。 (为什么您的 Cygwin ruby​​ 解释器显然在搜索带有 Windows 反斜杠的路径?)。

    或者,你试过run.exe吗?

    C:\cygwin\bin\run.exe -p /starting/dir exe_to_run
    

    这是手册页条目:

    名字

    运行 - 使用隐藏的控制台窗口启动程序

    概要

    运行 [ -p 路径 ] 命令 [ -wait ] 参数

    运行命令 [ -p 路径 ] [ -wait ] 参数

    描述

    Windows 程序要么是 GUI 程序,要么是控制台程序。什么时候 已启动的控制台程序将附加到现有控制台 或创建一个新的。 GUI 程序永远不能附加到现有的 con- 唯一。无法附加到现有控制台,但在以下情况下将其隐藏 作为 GUI 程序启动。

    run 将为您执行此操作。它作为中间体工作并开始一个亲 gram 但使控制台窗口隐藏。

    使用 -p path 可以将路径添加到 PATH 环境变量。

    发出 -wait 作为第一个程序参数将使运行等待程序 完成,否则立即返回。

    第二个变体用于创建包装器。如果可执行文件是 命名为runco​​mmand(例如runemacs),run 会尝试启动程序(例如 emacs)。

    示例

    运行 -p /usr/X11R6/bin xterm

    运行 emacs -wait runemacs - 等待

    运行 make -wait

    【讨论】:

      【解决方案2】:

      您为什么不执行一个非交互式 bash shell,它从您的 .NET 应用程序运行 ruby​​?类似的东西:

      bash --login -c <your-path-to-ruby> <your-library-to-load>
      

      不确定您的文件结构,例如,

      bash --login -c /usr/bin/ruby ~/test/ruby.rb
      

      查看-c option from the bash man page 了解更多信息。

      【讨论】:

      • 试过这个完全相同的问题。给出这个错误: rb /usr/bin/ruby: no such file to load -- ubygems (LoadError)
      • 如果您从交互式 bash shell 中键入完全相同的命令(-c 之后的内容),您会得到...?
      • 实际上很奇怪,除非我从 cygwin shell 启动 cygwin,即使我执行“bash --login -i”也不会工作
      • 我猜 cygwin 的 bash 不够聪明,无法理解没有 cygwin shell 的文件系统...
      猜你喜欢
      • 2012-04-12
      • 1970-01-01
      • 1970-01-01
      • 2012-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多