相关疑难解决方法(0)

操作方法:在C#中执行命令行,获取STD OUT结果

如何从C#执行命令行程序并返回STD OUT结果.具体来说,我想对以编程方式选择的两个文件执行DIFF,并将结果写入文本框.是的,我可以为自己解决这个问题,但肯定有人做过类似的事情,我很懒...

c# command-line

454
推荐指数
12
解决办法
44万
查看次数

如何在一行中执行多个命令

我知道Unix有以下命令可以在一行中执行多个命令,我该如何在DOS中执行此操作?

command1 ; command2 ; command3 ...
Run Code Online (Sandbox Code Playgroud)

windows cmd

88
推荐指数
1
解决办法
11万
查看次数

Windows自动化telnet

我想运行一组通常在telnet中运行的命令(来自c#).

例如,我想运行以下内容

using System;
using System.Diagnostics;

namespace InteractWithConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            ProcessStartInfo cmdStartInfo = new ProcessStartInfo();
            cmdStartInfo.FileName = @"C:\Windows\System32\cmd.exe";
            cmdStartInfo.RedirectStandardOutput = true;
            cmdStartInfo.RedirectStandardError = true;
            cmdStartInfo.RedirectStandardInput = true;
            cmdStartInfo.UseShellExecute = false;
            cmdStartInfo.CreateNoWindow = true;

            Process cmdProcess = new Process();
            cmdProcess.StartInfo = cmdStartInfo;
            cmdProcess.ErrorDataReceived += cmd_Error;
            cmdProcess.OutputDataReceived += cmd_DataReceived;
            cmdProcess.EnableRaisingEvents = true;
            cmdProcess.Start();
            cmdProcess.BeginOutputReadLine();
            cmdProcess.BeginErrorReadLine();

            cmdProcess.StandardInput.WriteLine("telnet telehack.com");
            int milliseconds = 2000;
            System.Threading.Thread.Sleep(milliseconds);
            cmdProcess.StandardInput.WriteLine("exit");

            cmdProcess.StandardInput.WriteLine("exit");
            cmdProcess.WaitForExit();
        }

        static void cmd_DataReceived(object sender, DataReceivedEventArgs e)
        {
            Console.WriteLine(e.Data);
        } …
Run Code Online (Sandbox Code Playgroud)

c# telnet tcpclient

17
推荐指数
2
解决办法
2145
查看次数

通过C#更新UI线程(文本框)

商业智能人员在这里有足够的C#在我的腰带下是危险的.

我已经构建了一个自制的winforms应用程序,它基本上在循环中执行命令行工具来"执行东西".所述东西可以在几秒或几分钟内完成.通常,我需要为位于DataTable中的每一行执行一次该工具.

我需要重定向命令行工具的输出并将其显示在"我的"应用程序中.我试图通过文本框这样做.我正在遇到有关更新UI线程的问题,而我自己无法理解这些问题.

为了执行我的命令行工具,我从这里借用了代码:如何解析c#的命令行输出?

这是我的等价物:

        private void btnImport_Click(object sender, EventArgs e)
        {
           txtOutput.Clear();
            ImportWorkbooks(dtable);

        }


        public void ImportWorkbooks(DataTable dt)
        {

            ProcessStartInfo cmdStartInfo = new ProcessStartInfo();
            cmdStartInfo.FileName = @"C:\Windows\System32\cmd.exe";
            cmdStartInfo.RedirectStandardOutput = true;
            cmdStartInfo.RedirectStandardError = true;
            cmdStartInfo.RedirectStandardInput = true;
            cmdStartInfo.UseShellExecute = false;
            cmdStartInfo.CreateNoWindow = false;

            Process cmdProcess = new Process();
            cmdProcess.StartInfo = cmdStartInfo;
            cmdProcess.ErrorDataReceived += cmd_Error;
            cmdProcess.OutputDataReceived += cmd_DataReceived;
            cmdProcess.EnableRaisingEvents = true;
            cmdProcess.Start();
            cmdProcess.BeginOutputReadLine();
            cmdProcess.BeginErrorReadLine();

            //Login
            cmdProcess.StandardInput.WriteLine(BuildLoginString(txtTabCmd.Text, txtImportUserName.Text, txtImportPassword.Text, txtImportToServer.Text)); 


            foreach (DataRow dr in dt.Rows)
            {
                   cmdProcess.StandardInput.WriteLine(CreateServerProjectsString(dr["Project"].ToString(), txtTabCmd.Text));

                //Import Workbook

                cmdProcess.StandardInput.WriteLine(BuildPublishString(txtTabCmd.Text, …
Run Code Online (Sandbox Code Playgroud)

c# user-interface multithreading

5
推荐指数
1
解决办法
1855
查看次数

C#执行外部程序并捕获(流)输出

我正在制作一个程序来处理一些视频文件.

我正在使用ffmpeg可执行文件将多个文件合并到一个文件中.此命令需要几分钟才能完成,因此,我需要一种方法来"监视"输出,并在GUI上显示进度条.

查看以下stackoverflow主题:

我做了这个代码:

Process ffmpeg = new Process
{
  StartInfo = 
  {
    FileName = @"d:\tmp\ffmpeg.exe",
    Arguments = "-f concat -safe 0 -i __sync.txt -c copy output.mp4",
    UseShellExecute = false,
    RedirectStandardOutput = true,
    CreateNoWindow = true,
    WorkingDirectory = @"d:\tmp"
  }
}

ffmpeg.EnableRaisingEvents = true;
ffmpeg.OutputDataReceived += (s, e) => Debug.WriteLine(e.Data);
ffmpeg.ErrorDataReceived += (s, e) => Debug.WriteLine($@"Error: {e.Data}");
ffmpeg.Start();
ffmpeg.BeginOutputReadLine();
ffmpeg.WaitForExit();
Run Code Online (Sandbox Code Playgroud)

当我运行此代码时,ffmpeg开始合并文件,我可以在Windows任务管理器上看到ffmpeg进程,如果我等待足够长时间,ffmpeg完成作业没有任何错误.但是,Debug.WriteLine(e.Data)永远不会调用它(Debug窗口上没有输出).试图改为Console.WriteLine(再次,没有输出).

那么,在此之后,我尝试了另一个版本:

Process ffmpeg = new Process
{
  StartInfo = 
  {
    FileName …
Run Code Online (Sandbox Code Playgroud)

c# ffmpeg

3
推荐指数
2
解决办法
3409
查看次数