<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=370594&amp;view=findpost&amp;p=3262311</guid>
        <pubDate>Thu, 17 Jan 2013 10:44:02 +0000</pubDate>
        <title>[Ruby] Запуск документа ассоциированной программой в Windows</title>
        <link>https://forum.sources.ru/index.php?showtopic=370594&amp;view=findpost&amp;p=3262311</link>
        <description><![CDATA[Romtek: В общем, написал я экспериментальную proof of concept реализацию на C#, взяв за основу примеры на <a class='tag-url' href='http://www.dotnetperls.com/process-start' target='_blank'>http://www.dotnetperls.com/process-start</a><br>
. Делает всё как мне и надо, с возвратом кода ошибки (если приложение неудачно закрывается). Позже попробую перевести на WinAPI и затем уже приделать привязку к Руби при помощи FFI или без.<br>
Хотя, ещё остаётся вариант вызывать как внешнюю программу системным вызовом. Пока надо подумать как лучше сделать.<br>
<br>
P.S. В свободное время пытаюсь воплотить разные идеи.]]></description>
        <author>Romtek</author>
        <category>Ruby</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=370594&amp;view=findpost&amp;p=3261770</guid>
        <pubDate>Wed, 16 Jan 2013 04:56:11 +0000</pubDate>
        <title>[Ruby] Запуск документа ассоциированной программой в Windows</title>
        <link>https://forum.sources.ru/index.php?showtopic=370594&amp;view=findpost&amp;p=3261770</link>
        <description><![CDATA[Мяут-Настоящий: Возможно имеет смысл использовать FFI и дергать напрямую WinAPI-шные функции?<br>
<br>
Например об этом говорят здесь:<br>
<a class='tag-url' href='http://habrahabr.ru/post/142172/' target='_blank'>http://habrahabr.ru/post/142172/</a><br>
и здесь: <a class='tag-url' href='http://stackoverflow.com/questions/11076010/how-to-call-createwindowex-from-ruby' target='_blank'>http://stackoverflow.com/questions/1107601...dowex-from-ruby</a><br>
<br>
ЗЫ. В питоне вообще есть pywin32  8-)]]></description>
        <author>Мяут-Настоящий</author>
        <category>Ruby</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=370594&amp;view=findpost&amp;p=3261756</guid>
        <pubDate>Tue, 15 Jan 2013 22:42:04 +0000</pubDate>
        <title>[Ruby] Запуск документа ассоциированной программой в Windows</title>
        <link>https://forum.sources.ru/index.php?showtopic=370594&amp;view=findpost&amp;p=3261756</link>
        <description><![CDATA[Romtek: То что результат выполнения одинаков я и так знаю. Мне бы решить вопрос насчёт синхронного вызова процесса.<br>
Повсюду пишут, что метод system является синхронным.  А значит, он должен <strong class='tag-b'>дожидаться</strong> окончания процесса. Только мне не понять почему это не срабатывает.]]></description>
        <author>Romtek</author>
        <category>Ruby</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=370594&amp;view=findpost&amp;p=3261723</guid>
        <pubDate>Tue, 15 Jan 2013 19:28:21 +0000</pubDate>
        <title>[Ruby] Запуск документа ассоциированной программой в Windows</title>
        <link>https://forum.sources.ru/index.php?showtopic=370594&amp;view=findpost&amp;p=3261723</link>
        <description><![CDATA[deil: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=370594&view=findpost&p=3259858'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Romtek &#064; <time class="tag-quote__quoted-time" datetime="2013-01-10T12:01:58+00:00">10.01.13, 12:01</time></span><div class='quote '><div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=370594&view=findpost&p=3259739'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>deil &#064; <time class="tag-quote__quoted-time" datetime="2013-01-10T07:43:11+00:00">10.01.13, 07:43</time></span><div class='quote '>оба исходных кода идентичны</div></div>Без Thread.new и с ним. Так что не идентичны.<br>
<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=370594&view=findpost&p=3259739'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>deil &#064; <time class="tag-quote__quoted-time" datetime="2013-01-10T07:43:11+00:00">10.01.13, 07:43</time></span><div class='quote '>у меня есть подозрение, что виноват rundll, который как раз и не дожидается возврата из ассоциированного приложения</div></div>Кстати, проверил сейчас в Линуксе:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">res=nil; command = Thread.new { res =system &quot;gnome-open list.txt&quot; }; command.join</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
<br>
Открывается gedit и в консоли тут же сообщается:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">=&#62; #&#60;Thread:0xa030e44 dead&#62;</div></ol></div></div></div></div><br>
и res возвращает &quot;успех&quot;.</div></div><br>
Вызванный через system процесс мгновенно завершается. Во втором листинге в отдельном потоке вызывается процесс, он мгновенно завершается и поток умирает. Результат выполнения обоих листингов идентичен.]]></description>
        <author>deil</author>
        <category>Ruby</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=370594&amp;view=findpost&amp;p=3259858</guid>
        <pubDate>Thu, 10 Jan 2013 12:01:58 +0000</pubDate>
        <title>[Ruby] Запуск документа ассоциированной программой в Windows</title>
        <link>https://forum.sources.ru/index.php?showtopic=370594&amp;view=findpost&amp;p=3259858</link>
        <description><![CDATA[Romtek: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=370594&view=findpost&p=3259739'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>deil &#064; <time class="tag-quote__quoted-time" datetime="2013-01-10T07:43:11+00:00">10.01.13, 07:43</time></span><div class='quote '>оба исходных кода идентичны</div></div>Без Thread.new и с ним. Так что не идентичны.<br>
<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=370594&view=findpost&p=3259739'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>deil &#064; <time class="tag-quote__quoted-time" datetime="2013-01-10T07:43:11+00:00">10.01.13, 07:43</time></span><div class='quote '>у меня есть подозрение, что виноват rundll, который как раз и не дожидается возврата из ассоциированного приложения</div></div>Кстати, проверил сейчас в Линуксе:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">res=nil; command = Thread.new { res =system &quot;gnome-open list.txt&quot; }; command.join</div></ol></div></div></div></div><br>
<br>
Открывается gedit и в консоли тут же сообщается:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">=&#62; #&#60;Thread:0xa030e44 dead&#62;</div></ol></div></div></div></div><br>
и res возвращает &quot;успех&quot;.]]></description>
        <author>Romtek</author>
        <category>Ruby</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=370594&amp;view=findpost&amp;p=3259739</guid>
        <pubDate>Thu, 10 Jan 2013 07:43:11 +0000</pubDate>
        <title>[Ruby] Запуск документа ассоциированной программой в Windows</title>
        <link>https://forum.sources.ru/index.php?showtopic=370594&amp;view=findpost&amp;p=3259739</link>
        <description><![CDATA[deil: Оффтоп: очевидно, что оба исходных кода идентичны :) <br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2013-01-10T07:45:40+00:00">10.01.13, 07:45</time></span></span><br>
Вообще у меня есть подозрение, что виноват rundll, который как раз и не дожидается возврата из ассоциированного приложения.]]></description>
        <author>deil</author>
        <category>Ruby</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=370594&amp;view=findpost&amp;p=3259678</guid>
        <pubDate>Wed, 09 Jan 2013 21:11:51 +0000</pubDate>
        <title>[Ruby] Запуск документа ассоциированной программой в Windows</title>
        <link>https://forum.sources.ru/index.php?showtopic=370594&amp;view=findpost&amp;p=3259678</link>
        <description><![CDATA[Romtek: В Руби программе требуется запустить программу для любого типа документа (mp3, html, pdf, ...) с ожиданием результата от запущенного процесса.<br>
<br>
Проблема заключается в том, что программа запускает процесс без ожидания окончания процесса, что недопустимо. Хочу контролировать результат успешности выполнения процесса, чтобы потом, в случае успеха, скопировать документ в хранилище.<br>
<br>
Программа должна работать в Windows (XP и может в других).<br>
<br>
Пробовал такой вариант:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">document = ARGV[0]</div><div class="code_line">&nbsp;</div><div class="code_line">if RUBY_PLATFORM =~ /mswin|mingw|cygwin|bccwin|wince|emx/</div><div class="code_line">&nbsp;&nbsp;res = system &quot;rundll32.exe url.dll,FileProtocolHandler #{document}&quot;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;puts &quot;OK&quot; if res</div><div class="code_line">end</div></ol></div></div></div></div><br>
потом такой, как советовалось в одном форуме, с помощью Thread:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">document = ARGV[0]</div><div class="code_line">&nbsp;</div><div class="code_line">if RUBY_PLATFORM =~ /mswin|mingw|cygwin|bccwin|wince|emx/</div><div class="code_line">&nbsp;&nbsp;command = Thread.new do</div><div class="code_line">&nbsp;&nbsp; &nbsp;res = system &quot;rundll32.exe url.dll,FileProtocolHandler #{document}&quot;</div><div class="code_line">&nbsp;&nbsp;end</div><div class="code_line">&nbsp;&nbsp;command.join</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;puts &quot;OK&quot; if res</div><div class="code_line">end</div><div class="code_line">&nbsp;</div><div class="code_line">puts &quot;OK&quot; if res</div></ol></div></div></div></div> <br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2013-01-09T21:15:04+00:00">09.01.13, 21:15</time></span></span><br>
Ruby 1.9.2]]></description>
        <author>Romtek</author>
        <category>Ruby</category>
      </item>
	
      </channel>
      </rss>
	