[Namazu-devel-ja 128] Re: Windows で動かす際に問題になりそうな箇所

Tadamasa Teranishi yw3t-trns @ asahi-net.or.jp
2004年 9月 7日 (火) 01:08:40 JST


寺西です。

Tadamasa Teranishi wrote:
> 
> my ($status, $fh_out, $fh_err) = util::systemcmd(@cmd);
> 
> のテストに notepad.exe, namazu.exe, mknmz.bat を使って動作を確認
> してみました。

pltests では namazu を使うのでワイルドカード展開が問題になります。
また、Windows 環境では mknmz はバッチファイルなので、バッチファイル
の問題が生じます。

しかし、フィルタで使う分にはこれらの問題はありません。
フィルタでワイルドカードを使ったり、(今のところ)バッチファイルを
起動することはありません。

このため、上記の 2 点の問題に関しては pltests 側のみ特別な対応
を行うことにしました。
 
> I. @cmd = ("mknmz.bat", "-C");
>    バッチファイルに引数を指定。
> 
>   NT 系 -> OK.
>   9x 系 -> BAD. 引数が渡らない。
> 
> J. @cmd = ("command.com", "/c", "mknmz.bat", "-C");
>    command.com /c を補う。(9x 系のみ)
> 
>   9x 系 -> OK.
> 
> K. @cmd = ("cmd.exe", "/c", "mknmz.bat", "-C");
>    cmd.exe /c を付加する。(NT 系のみ)
> 
>   NT 系 -> OK.

これですが、Windows 9x では引数の文字列が長いとハングアップする
ことがわかりました。コマンドラインの長さ 127 文字制限に引っかかった
のかとも思いましたが、STDOUT をファイル出力に切り替えない場合は
問題なく動くことから、そういった単純な問題ではないようです。

STDOUT を dup, dup2 を使ってファイルに切り替え、spawn でコマンドを
実行するラッパプログラムを作ったりしましたが、解決しないことから、
command.com の問題かもしれません。

有効な回避策がないのと、あまり手間をかけたくないので、結局

> Win9x系と NT系を区別する方法がなさそうということが問題ということのように
> 見えますが、もしそういうことならば WIN32 環境では
> Win32::GetOSVersion() とか Win32::GetOSName()
> http://search.cpan.org/dist/perl/win32/ext/Win32/Win32.pm
> を併用してみてはどうでしょう?

か、あるいは COMSPEC の値で Windows 9x 系であるかどうかをチェックして、
Windows 9x 系の場合は、
 
  @cmd = ("win95cmd.exe", "/c", "mknmz.bat", "-C");
  win95cmd.exe /c を補う。(9x 系のみ)

とすることにします。このため、pltests を Windows 9x 系で動かすには
win95cmd.exe が必須になります。

win95cmd.exe は、NT 系の cmd.exe の 9x 系版で、
http://www.neuro.gatech.edu/users/cwilson/cygutils/consize/Win95Cmd.exe
で入手可能です。あるいは
http://ftp2.skynet.be/pub/ftp.microsoft.com/platformsdk/oct2000/psdk-x86.49.cab
の中には Win95Cmd_Exe.95CE7C64_A68D_11D2_A852_00C04FC2A854 という
名前で入っています。
-- 
=====================================================================
寺西 忠勝(TADAMASA TERANISHI)  yw3t-trns @ asahi-net.or.jp
http://www.asahi-net.or.jp/~yw3t-trns/index.htm
Key fingerprint =  474E 4D93 8E97 11F6 662D  8A42 17F5 52F4 10E7 D14E




Namazu-devel-ja メーリングリストの案内