簡體   English   中英

在C#winform應用程序上顯示cmd命令

[英]Show cmd commands on C# winform Application

我需要編寫一個小的實用程序來重建解決方案。 我正在使用下面的代碼來做同樣的事情。

        string solutionFile = @"E:\Projects\TFS\Code\WebSite.sln";
        string cmd1 = @"""C:\Program Files\Microsoft Visual Studio 11.0\VC\vcvarsall.bat"" x86" + " &devenv " + "\"" + solutionFile + "\"" + " /rebuild release";
        cmd1 = "\"" + cmd1 + "\"";
        String command = String.Format("{0} {1}", @"/k ", cmd1);
        ProcessStartInfo cmdsi = new ProcessStartInfo("cmd.exe")
        {
            UseShellExecute = false,
            RedirectStandardOutput = true
        };

        cmdsi.Arguments = command;
        using (Process cmd = Process.Start(cmdsi))
        {
            using (StreamReader reader = cmd.StandardOutput)
            {
                string result = reader.ReadToEnd();
                listBox1.Items.Add(result);
            }
        }

如果您將在命令提示符中觀察到,那么您可以看到執行輸出,但同一內容未在列表框中反映出來。

請幫助解決此問題。

先感謝您。

您可以將輸出重定向到一個臨時文件,然后可以像以下方式讀取文件:

string cmd1 = "help > e:/temp.txt"; //e:/temp.txt is temporary file where the output is redirected.
        String command = String.Format("{0} {1}", @"/k ", cmd1);

        ProcessStartInfo cmdsi = new ProcessStartInfo("cmd.exe")
        {
            //You don't need to read console outputstream
            //UseShellExecute = false,
            //RedirectStandardOutput = true
        };

        cmdsi.Arguments = command;
        using (Process cmd = Process.Start(cmdsi))
        {
            //Check if file exist or you can wait till the solution builds completely. you can apply your logic to wait here.
            if (File.Exists("E:/temp.txt"))
            {
                //Read the files here 
                string[] lines = File.ReadAllLines("E:/temp.txt");
                //Do your work here
            }
        }

您可以異步執行:

string solutionFile = @"E:\Projects\TFS\Code\WebSite.sln";
string batFile = @"C:\Program Files\Microsoft Visual Studio 11.0\VC\vcvarsall.bat";
string args = "x86" + " &devenv " + "\"" + solutionFile + "\"" + " /rebuild release";

ProcessStartInfo cmdsi = new ProcessStartInfo(batFile)
{
                Arguments = args,
                UseShellExecute = false,
                RedirectStandardOutput = true
};

using (Process cmd = new Process())
{
            cmd.StartInfo = cmdsi;
            cmd.OutputDataReceived += (sender, args) => listBox1.Items.Add(string.IsNullOrEmpty(args.Data) ? string.Empty : args.Data);
            cmd.Start();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM