Скрипт Vbs работает нормально с CMD, но не в коде - PullRequest
0 голосов
/ 03 июля 2019

Когда я выполняю скрипт через код, он идёт в бесконечном цикле. Но тот же скрипт работает в CMD

пробовал с CMD, и он работает, но не работает в коде. Возьмите любой VB Script в качестве образца и подтвердите.

    private string excecuteScript(string retValue)
    {
        try
        {
            string filetoexecute = Path.Combine(Application.StartupPath, Path.GetExtension(ScriptName).EndsWith(".vbs",StringComparison.InvariantCultureIgnoreCase) ? "AA_MyVB.vbs" : "AA_MyJS.js");
            filetoexecute = string.Format("\"" + filetoexecute + "\"");

            string arguments = " " + filetoexecute + " " + ScriptInputPara + " \"" + ScriptName + "\" ";

            ProcessStartInfo startInfo = new ProcessStartInfo()
            {
                FileName = Path.Combine(Environment.SystemDirectory, "WScript.exe"),
                Arguments = arguments,
                UseShellExecute = false,
                CreateNoWindow = true,
                RedirectStandardOutput = true,
                RedirectStandardError = true
            };

            var myProcess = CommonMethods.InvokeProcess(startInfo);

            StreamReader errorStream = myProcess.StandardError;
            StreamReader outputStream = myProcess.StandardOutput;
            string theOutput = string.Empty;

            bool stopWhile = false;
            while (!stopWhile)
            {
                stopWhile = myProcess.HasExited;
                if (CmdTask.IsTaskTimedout)
                {
                    stopWhile = true;
                    myProcess.Kill();
                }
            }
            theOutput += outputStream.ReadLine();

            TheError += errorStream.ReadToEnd();

            if (myProcess.ExitCode != 0)
            {
                TheError = "Error occurred while executing script file";
            }

            if (IsScriptTask && !string.IsNullOrEmpty(theOutput) && !string.IsNullOrEmpty(ScriptOutputPara))
                CmdTask.SetVariableValue(ScriptOutputPara, theOutput);

        }
        catch (Exception ex)
        {
            retValue = (ex.Message);
        }

        return retValue;
    }

Факт: myProcess.HasExited возвращает false

Ожидаемое: myProcess.HasExited возврат true

если я выполню theOutput += outputStream.ReadLine(); перед циклом while, myProcess.HasExited вернет true ...

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