none
WScript.ShellのSleepメソッドについて RRS feed

  • 質問

  • 環境:Win7 64Bit, IIS7.5

    ClassicASPにおいて「WScript.Shell」のインスタンスを生成し、

    Sleepメソッドを実行すると、エラーとなります。

    なお、WSHではエラーとなりません。

    原因についてご存知の方、

    ご教授願えますでしょうか。

    なお、エラーのログの一部を下記に抜粋します。

    よろしくお願い致します。

    <LOG>

    2015-03-26 07:24:29 ::1 GET /Web/ |12|800a01b6|オブジェクトでサポートされていないプロパティまたはメソッドです。:_'Sleep' 80 - ::1 Mozilla/5.0+(compatible;+MSIE+9.0;+Windows+NT+6.1;+WOW64;+Trident/5.0) 500 0 0 0

    <参考ソース>

    With CreateObject("WScript.Shell")

    Call .Sleep(intTime)

    End With

    2015年3月26日 7:53

回答

  • WshShell オブジェクトにSleepメソッドは存在しません。

    VB言語におけるWithステートメントは指定されたオブジェクトからメソッドを探しはしますが、見つからなかった場合はグローバルからメソッドを探します。その結果、WSH環境ではWScriptオブジェクトが持つSleepメソッドが実行されているのではないでしょうか?

    • 回答としてマーク UserNameT_S 2015年3月28日 2:19
    2015年3月26日 8:58

すべての返信

  • WshShell オブジェクトにSleepメソッドは存在しません。

    VB言語におけるWithステートメントは指定されたオブジェクトからメソッドを探しはしますが、見つからなかった場合はグローバルからメソッドを探します。その結果、WSH環境ではWScriptオブジェクトが持つSleepメソッドが実行されているのではないでしょうか?

    • 回答としてマーク UserNameT_S 2015年3月28日 2:19
    2015年3月26日 8:58
  • Withステートメントのオブジェクトの参照先は不明ですが、

    Win7 32bitではClassicASPでも正常に動作されます。

    そのため原因は異なるのではないかと予想しております。

    2015年3月26日 11:52
  • リンク先は読まれたのでしょうか? WScript.ShellオブジェクトにSleepメソッドが存在しないのはドキュメントから明らかです。それともドキュメントが誤っていると主張されているのでしょうか?

    また元の質問ではWSHでは動作するがClassic ASPでは動作しないというものでしたが、今回の返信では同じClassic ASPであってもWin7 32bit上では動作するがWin7 64bit上では動作しない、ということでしょうか?
    32bit / 64bitで同一のコードなのか今一度確認していただきたく思います。もしくはWith句を外し、単に Call Sleep(intTime) を実行するとか。

    2015年3月26日 14:48
  • リンク先、気づいておりませんでした。

    申し訳ございません。

    オブジェクトの違い、理解できました。

    大変失礼いたしました。

    2015年3月28日 2:19