[#42454] 多量の正規表現との効率的なマッチのアイデアを、、 — しん <dezawa@...>

出沢です

22 messages 2006/06/22
[#42455] Re: 多量の正規表現との効率的なマッチのアイデアを、、 — rubikitch <rubikitch@...> 2006/06/22

From: しん <dezawa@aliadne.net>

[#42456] Re: 多量の正規表現との効率的なマッチのアイデアを、、 — しん <dezawa@...> 2006/06/23

出沢です

[#42458] Re: 多量の正規表現との効率的なマッチのアイデアを、、 — rubikitch <rubikitch@...> 2006/06/23

From: しん <dezawa@aliadne.net>

[#42459] Re: 多量の正規表現との効率的なマッチのアイデアを、、 — しん <dezawa@...> 2006/06/23

出沢です

[#42460] Re: 多量の正規表現との効率的なマッチのアイデアを、、 — rubikitch <rubikitch@...> 2006/06/23

From: しん <dezawa@aliadne.net>

[#42461] Re: 多量の正規表現との効率的なマッチのアイデアを、、 — しん <dezawa@...> 2006/06/23

出沢です。

[ruby-list:42348] win32oleの「メソッドが無い」というランタイムエラー

From: "conundrum" <conundrum@...>
Date: 2006-06-01 04:07:01 UTC
List: ruby-list #42348
conundrumです。

win32oleに関する報告です。(ruby 1.8.4 (2005-12-24) [i386-mswin32])
ごめんなさい、ちょっと長いです。

ファイル拡張子 .hoge を何か適当なアプリケーションに関連づけて、
.hogeファイルを下記のようなコードで開こうとすると、
予期せぬエラーに遭遇しました。

test-wscript-shell-run.rb
------------------------------------------------------------
#! ruby -Ks

require 'win32ole'

shell = WIN32OLE.new( 'WScript.Shell' )
shell.Run( 'test.hoge' )
------------------------------------------------------------

実行結果
winxp-command-prompt>ruby test-wscript-shell-run.rb
test-wscript-shell-run.rb:6:in `method_missing': Run (WIN32OLERuntimeError)
    OLE error code:80070483 in <Unknown>
      <No Description>
    HRESULT error code:0x80020009
      例外が発生しました。      from test-wscript-shell-run.rb:6


具体的には、.hoge を秀丸エディタに関連づけました。
test.hoge はプレーンテキストファイルです。

このエラーに遭遇したとき、PCの引っ越し作業直後であったため、
まずは何らかのRubyのインストールに関するトラブルではないか、
と考えました。
「Runメソッドが無い」だって? そりゃ win32ole の故障だろう。
というのが、最初の安直な想像でした。

が、あれこれ苦闘して、別の原因があることが判明しました。

まず、上記のRubyコードと等価なVBScriptコードを書いて、
何が起きるか調べました。

    Set objShell = WScript.CreateObject( "WScript.Shell" )
    objShell.Run( "test.hoge" )

すると、こんな結果になりました。

    Microsoft (R) Windows Script Host Version 5.6
    Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.

    x:\xxxxxxx\hoge.vbs(2, 1) (null): この操作に対して指定されたファイルには、
    アプリケーションが関連付けられていません。

なるほど、関連づけがうまくいっていないのか、と理解できました。
ただ、Windows Explorer できちんと関連づけ作業を行い、
test.hoge をダブルクリックすれば、ちゃんと秀丸エディタで開かれる。
どういうことだろう?
理由がわからず、Excite質問広場にて質問を投げてみましたが、
回答を得られませんでした。
( このときのハンドルネームは nagilum です。
  もしかして、ご覧になった方もいらっしゃるかもしれませんね。)

仕方なく秀丸エディタをつついているうちに、
秀丸エディタにも「関連づけ」を行う機能があることに思い当たり、
もしかして・・・と秀丸エディタで関連づけを行ってみると、
上記のエラーはみごとに解消されてしまいました。

そうなると、疑うべきはレジストリです。
Windows Explorer による関連づけと秀丸エディタによる関連づけの
レジストリに対する影響の差分を調べました。
影響箇所が多数の箇所に散在するため、100%確証が持てる答えに
たどりつけませんでした。が、大まかに書くと、こういうことです。

  Windows Explorer は、自分がプログラム起動に使う情報だけしか
  レジストリに書かない。
  対して秀丸エディタは HKEY_CLESSES_ROOT など「クラス情報」に
  拡張子情報を登録する。
  WScript.Shell.Run はレジストリの「クラス情報」を当てにしている。


まとめます。

win32oleが「メソッドが無い」というランタイムエラーを吐く場合、
それは「メソッドが無い」のではなく「メソッド呼び出しの結果異常」
を疑う必要がある。

Windows Explorer を使った関連づけは不完全。
手作業または専用のツールや方法で、きちんと「クラス情報」を登録する
必要がある。( これはRuny/win32oleとは無関係ですけど )

最後に。
win32oleには本当にお世話になってます。助かってます。
ありがとうございます。足を向けて寝られないです。
ですので、win32oleの緯度,経度をご存知の方は教えてください。
足を向けて寝ないようにします。


In This Thread

Prev Next