Драгоценные камни с .NET Applications - Как настроить исполняемые файлы, чтобы они работали без ошибок? - PullRequest
1 голос
/ 15 июля 2010

У меня есть гем, 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)

Ответы [ 2 ]

2 голосов
/ 15 июля 2010

если вы распространяете его с файлом "rh.exe" тогда вы захотите создать файл

бен / отн

s.executables << 'bin / rh' </p>

затем, когда он будет установлен, gems создаст файл "rh.bat", который по существу выполняет ruby ​​"bin / rh" (как вы видели).

Так что в bin / rh поместите что-то вроде

result = system(File.dirname(__FILE__) + "/rh.exe" ARGV.join(' '))
exit 1 unless result
1 голос
/ 15 июля 2010
result = system(File.dirname(__FILE__) + "/rh.exe " + ARGV.join(' '))
exit 1 unless result

То есть конечный результат должен выглядеть следующим образом? обратите внимание на пробел после 'rh.exe'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...