none
WSHのWScript.Quit()が遅れる RRS feed

  • 質問

  • wsfファイルでVBScriptとJScriptを一緒に使ってみたのですが、Quit()を実行した際に、後続の異なるスクリプトエンジンを呼び出すscript要素の中身が少しだけ実行されてしまうようです。

    これは私の環境が変なんでしょうか。 

    <?xml version="1.0" ?>
    <package>
    <job id="job_main">
    <script language="VBScript">
    <![CDATA[
    WScript.Quit 0
    ']]>
    </script>
    <script language="VBScript">
    <![CDATA[
    ' もちろん実行されない
    WScript.Echo "hello!"
    ']]>
    </script>
    <script language="JScript">
    <![CDATA[
    // なぜか少し実行された後にエラーになって中断
    for (var i = 0; i < 40; ++i)
        WScript.Echo("hi! (" + i);
    //]]>
    </script>
    </job>
    </package>

    エラーメッセージは

    """

    スクリプト "dummy.wsf" の実行時間が制限時間を超えました。
    スクリプトの実行は中止されました。

    """

    というものです。

    OSはWin10 homeです。


    2019年5月24日 15:24

回答

  • 仕様について記された資料があるわけでは無いですが、実験結果からの自分の予想。

    1. language が同じ物については結合して実行される。そのため、language="VBScript" は一つに統合され、Quit 後の 2 つ目の VBScript ブロックの実行がスキップされる。
    2. language が異なるものは、上から順に実行される。Quit による終了処理中に未処理の script ブロックが現れると、今回のように処理途中で打ち切られる可能性がある。
    3. language="VBScript" と language="VBS" は結合されず、別の種類のブロックとして扱われる可能性がある。同様に、language="JScript" と language="JavaScript" と language="JS" も別のブロックとして扱われる可能性がある。
    • 回答としてマーク 0noketa 2019年5月25日 4:32
    2019年5月25日 0:00

すべての返信

  • 仕様について記された資料があるわけでは無いですが、実験結果からの自分の予想。

    1. language が同じ物については結合して実行される。そのため、language="VBScript" は一つに統合され、Quit 後の 2 つ目の VBScript ブロックの実行がスキップされる。
    2. language が異なるものは、上から順に実行される。Quit による終了処理中に未処理の script ブロックが現れると、今回のように処理途中で打ち切られる可能性がある。
    3. language="VBScript" と language="VBS" は結合されず、別の種類のブロックとして扱われる可能性がある。同様に、language="JScript" と language="JavaScript" と language="JS" も別のブロックとして扱われる可能性がある。
    • 回答としてマーク 0noketa 2019年5月25日 4:32
    2019年5月25日 0:00
  • 検証ありがとうございます。

    どの環境でもこうなってしまうんですね。

    2019年5月25日 4:28