xyzzycli.exeの-waitオプションが正常に動作していない

Issue #23 resolved
Anonymous created an issue

== 再現方法 ==

cmd.exe を起動する

コマンドライン実行 start /wait xyzzycli.exe -wait readme_multiframe.txt

== 期待する動作 == readme_multiframe.txt のバッファが閉じられた時点で、cmd.exe のプロンプトが出る

== 実際の動作 ==

バッファが閉じられるのを待たずにプロンプトが出る

-wait というバッファができる

== 再現バージョン == * 0.2.3.5

Comments (9)

  1. Anonymous

    すみません。ポストしたIssueの内容がそもそも間違っていたので訂正します。

    (1) 動作確認は実際は bash (MSYS) と組み合わせて行った

    スタートメニュー等から、直接 cmd.exe を実行するのではなく、 MSYS の bash から cmd.exe を呼び出して動作確認を行いました。

    cmd.exe単体とbash経由のcmd.exeでは動作が違うようです。

    (2) xyzzycli -wait は cmd.exe 上で期待通りに動作しないのが 0.2.2.235 以来の仕様

    xyzzy 0.2.2.235 のリリースされているバイナリを Windows XP (32bit) で動作させて、 cmd.exe 上で確認したところ、xyzzycli -wait はバッファが閉じられるのを待たずにプロンプトを返します。

    Windows7 (64bit, x64) の System32\cmd.exe, SysWOW64\cmd.exe でも同様の動作となります

    (3) とりあえずの改善案

    Makefile のリンカオプションを -subsystem:windows から -subsystem:console にすると改善します

    xyzzycli.exe: $(CLIENT_OBJS) xyzzycli.res
    	$(CXX) $(CLIENT_OBJS) kernel32.lib user32.lib xyzzycli.res \
    -	  -link -fixed -subsystem:windows -entry:process_startup 
    +	  -link -fixed -subsystem:console -entry:process_startup 
    

    ただ、これだと普段使うときに悲しいので、もうちょっと確認してみます。

  2. Anonymous

    すみません。xyzzyのreadmeを見直しましたが、 この動作はそもそもこういう仕様で良いんでした…^_^;;

    そして匿名なので消せないw

  3. Anonymous

    x64 環境での確認手順を書いておきます。確認対象は

    • -wait の動作
    • 親プロセスの WoW64 判別

    の2点です。

    確認用のダミーファイルを作る

    > echo This is %windir%\System32\my-test.txt>%windir%\System32\my-test.txt
    > echo This is %windir%\SysWOW64\my-test.txt>%windir%\SysWOW64\my-test.txt
    

    xyzzyを起動して確認

    > cd *xyzzy.exeのあるディレクトリに移動*
    > .\xyzzy.exe -no-init-file
    > start /wait .\xyzzycli.exe -no-init-file -wait %windir%\System32\my-test.txt
    ** xyzzy 上で C:\Windows\System32\my-test.txt が開かれる。バッファを閉じるとプロンプトが出る **
    > %windir%\SysWOW64\cmd.exe
    >> start /wait .\xyzzycli.exe -no-init-file -wait %windir%\System32\my-test.txt
    ** xyzzy 上で C:\Windows\SysWOW64\my-test.txt が開かれる。バッファを閉じるとプロンプトが出る **
    

    後始末

    >> exit
    > del %windir%\System32\my-test.txt
    > del %windir%\SysWOW64\my-test.txt
    > exit
    
  4. Log in to comment