У меня есть гем, roundhouse , который представляет собой приложение, скомпилированное с помощью .NET (C #). Работает в Windows и должен выполняться в 32-разрядном процессе.
Чтобы настроить gemspec, я установил:
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'
Когда я устанавливаю гем, я могу набрать rh.exe из командной строки по любому пути, и он должен работать правильно.
На практике я не вижу эту работу правильно. Вот к чему я возвращаюсь:
В окне есть это для заголовка: 16-битная подсистема MS-DOS
C: \ WINDOWS \ system32 \ cmd.exe - rh.exe
ЦП NTVDM обнаружил недопустимую инструкцию.
CS: xxxx IP: xxxx OP: xx xx xx xx xx Выберите «Закрыть», чтобы закрыть приложение.
Вот изображение проблемы (ссылка на TwitPic): Ошибка
Если я зайду в каталог, где был установлен элемент, я могу запустить его, и он отлично работает. Это просто что-то в регистрации команды для запуска из любого места.
Я довольно долго искал, прежде чем спрашивать, и ничего не придумал. Может быть, я не знаю, что мне нужно искать. Итак, позвольте мне задать вопрос, есть ли способ зарегистрировать исполняемый файл с гемами для исполняемых приложений Windows (созданный с .NET) и правильно ли они регистрируются в командной строке? Если так, то как это сделать?
UPDATE:
Я обнаружил, что 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)