代码之家  ›  专栏  ›  技术社区  ›  ferventcoder

Gems与.NET应用程序-如何设置可执行文件,使其运行时不会出错?

  •  1
  • ferventcoder  · 技术社区  · 14 年前

    我有一颗宝石, roundhouse ,这是一个用.NET(C#)编译的应用程序。在Windows上运行,它应该在32位进程中运行。

     Gem::Specification.new do |s|
      s.platform = 'mswin32'
      s.name        = 'roundhouse'
      s.version     = version
      s.files = Dir['lib/**/*'] + Dir['bin/**/*']
      s.bindir = 'bin'
      s.executables << 'rh.exe'
    

    当我安装gem时,我应该能够从命令行的任何路径键入rh.exe,并且它应该能够正确运行。

    实际上,我并没有正确地看待这一点。这就是我要说的:

    C:\WINDOWS\system32\cmd.exe-rh.exe

    NTVDM CPU遇到非法指令。

    以下是该问题的图片(链接到TwitPic): Error

    如果我转到安装该项目的目录,我就可以运行它,而且效果很好。这只是命令注册的一部分,可以从任何地方运行。

    我在问之前找了不少,什么也没找到。可能是我不知道我该找什么。所以让我问一个问题,有没有一种方法可以注册gems的windows可执行应用程序(用.NET构建)的可执行文件,并让它们正确地注册到命令行?如果是这样的话,是怎么做到的?

    我发现gems在C:\Ruby\bin目录中创建了一个垫片,它指向另一个文件。所以有一个rh.exe文件实际上只是一个文本文件。其内容如下:

    #!C:/Ruby/bin/ruby.exe
    #
    # This file was generated by RubyGems.
    #
    # The application 'roundhouse' is installed as part of a gem, and
    # this file is here to facilitate running it.
    #
    
    require 'rubygems'
    
    version = ">= 0"
    
    if ARGV.first =~ /^_(.*)_$/ and Gem::Version.correct? $1 then
      version = $1
      ARGV.shift
    end
    
    gem 'roundhouse', version
    load Gem.bin_path('roundhouse', 'rh.exe', version)
    
    2 回复  |  直到 4 年前
        1
  •  2
  •   rogerdpack    14 年前

    如果你用“rh.exe”文件分发 然后您将要创建一个文件

    箱子/右侧

    然后,当它安装后,gems将创建一个“rh.bat”文件,该文件基本上运行ruby“bin/rh”(如您所见)。

    所以在bin/rh中

    result = system(File.dirname(__FILE__) + "/rh.exe" ARGV.join(' '))
    exit 1 unless result
    
        2
  •  1
  •   drusellers    14 年前
    result = system(File.dirname(__FILE__) + "/rh.exe " + ARGV.join(' '))
    exit 1 unless result
    

    所以最终结果应该是这样的?注意“rh.exe”后面的空格