Почему этот VBScript дает мне ошибку? - PullRequest
15 голосов
/ 21 апреля 2009

Я сохранил этот скрипт VBScript на своей локальной машине как c: \ test.vbs:

WScript.StdOut.WriteLine "This is a test"

Когда я запускаю его из командной строки, я получаю эту ошибку:

---------------------------
Windows Script Host
---------------------------
Script: C:\test.vbs
Line:   1
Char:   1
Error:  The handle is invalid. 
Code:   80070006
Source:     (null)

---------------------------
OK   
---------------------------

Я получаю это под Windows Vista (SP1) и Windows XP Pro (SP3).

Ответы [ 3 ]

34 голосов
/ 22 апреля 2009

Эта ссылка может вам помочь:

http://www.tech -archive.net / Архив / Scripting / microsoft.public.scripting.vbscript / 2004-07 / 0979.html

Похоже, что дескриптор StdOut доступен только при использовании хоста консоли (cscript.exe), а не оконного хоста (wscript.exe). Если вы хотите, чтобы код работал, вы должны использовать cscript.exe для его запуска.

В посте также описывается, как изменить поведение по умолчанию для запуска сценариев с использованием cscript, а не wscript.

8 голосов
/ 22 апреля 2009

Как описано в статье в принятом ответе, мой скрипт работал, когда я вызывал его из командной строки следующим образом:

cscript test.vbs

Вы также можете изменить хост скрипта по умолчанию, чтобы вызов cscript не требовался каждый раз. После этого оригинальная команда работает без изменений.

cscript //h:cscript //s 

Вы можете восстановить исходное поведение с помощью:

cscript //h:wscript //s 

Спасибо !!

1 голос
/ 03 декабря 2012

Я отправил это решение в ошибке " cscript - вывести выходные данные в той же строке на консоли? ", которая, по моему мнению, связана с этой проблемой.

Я использую следующую функцию «log» в моем JavaScript для поддержки среды wscript или cscript. Как вы можете видеть, эта функция будет записывать в стандартный вывод, только если это возможно.

var ExampleApp = {
    // Log output to console if available.
    //      NOTE: Script file has to be executed using "cscript.exe" for this to work.
    log: function (text) {
        try {
            // Test if stdout is working.
            WScript.stdout.WriteLine(text);
            // stdout is working, reset this function to always output to stdout.
            this.log = function (text) { WScript.stdout.WriteLine(text); };
        } catch (er) {
            // stdout is not working, reset this function to do nothing.
            this.log = function () { };
        }
    },
    Main: function () {
        this.log("Hello world.");
        this.log("Life is good.");
    }
};

ExampleApp.Main();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...