Member 11704877 Ответов: 1

Как отобразить выходные данные из файла. vbs, обработанные с помощью оконного приложения C#.


У меня есть файл .vbs,который должен быть доступен в приложении c#, чтобы передать параметры и отобразить out.
В настоящее время, когда я выполняю файл .vbs через командную строку, я могу видеть выходные данные.В то время как то же самое происходит при доступе через процесс C# Diagostics. Я не понимаю, как отображать выходные данные.
Пожалуйста, помогите мне отобразить вывод.

Пожалуйста, приведите мне пример.

Что я уже пробовал:

Код C# :
static class Program
{
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    
    private static int lineCount=0;
  private static StringBuilder output= new StringBuilder();
    [STAThread]
    static void Main()
    {
        Process scriptProc = new Process();
        scriptProc.StartInfo.FileName = @"cscript";
        //scriptProc.StartInfo.WorkingDirectory = @"D:\vbs\"; //<---very important 
        scriptProc.StartInfo.Arguments = "//B //Nologo D:\vbs\test.vbs";
        scriptProc.StartInfo.UseShellExecute = true;
        scriptProc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; //prevent console window from popping up
        scriptProc.StartInfo.UseShellExecute = false;
        scriptProc.StartInfo.RedirectStandardOutput = true;
        scriptProc.OutputDataReceived += new DataReceivedEventHandler((sender, e) =&gt;
        {
        if (!String.IsNullOrEmpty(e.Data))
        {
          lineCount++;
         output.Append("\n[" + lineCount + "]:" + e.Data);
         }
        });
        //try
        //{
            scriptProc.Start();
            scriptProc.BeginOutputReadLine();
            scriptProc.WaitForExit(); // <-- Optional if you want program running until your script exit
            Console.WriteLine(output);
            scriptProc.WaitForExit();
            scriptProc.Close();           //System.Diagnostics.Process.Start(@"cscript //B //Nologo D:\vbs\test.vbs");
        //}
        //catch(Exception exception)
        //{
        //    Console.WriteLine("Exception :" + exception.Message);

        //}
        Console.ReadLine();
    }
}

.vbsfile:
intHighNumber = 100
intLowNumber = 1
For i = 1 to 5
    Randomize
    intNumber = Int((intHighNumber - intLowNumber + 1) * Rnd + intLowNumber)
    Wscript.Echo intNumber
Next

1 Ответов

Рейтинг:
2

Richard MacCutchan

Видеть Изменение панели.Собственность RedirectStandardOutput (Системы.Диагностика)[^Было бы также полезно, если бы вы точно объяснили, что происходит при запуске этого кода.


Member 11704877

При запуске приведенного выше кода не появляется ничего, кроме пустого экрана.

Richard MacCutchan

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

Richard MacCutchan

Я только что запустил ваш сценарий, и он не дал никакого результата. Может быть, нужно еще немного проверить.

Странно, но сейчас это, кажется, работает.