示例: Cmd.Run("www.baidu.com"); // 調用cmd命令打開百度
using System; using System.Collections.Generic; using System.Diagnostics; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; namespace APK_Tool { /// <summary> /// 執行CMD命令,或以進程的形式打開應用程序(d:\*.exe) /// </summary> public class Cmd { /// <summary> /// 已后台進程的形式執行應用程序(d:\*.exe) /// </summary> public static Process newProcess(String exe) { Process P = new Process(); P.StartInfo.CreateNoWindow = true; P.StartInfo.FileName = exe; P.StartInfo.UseShellExecute = false; P.StartInfo.RedirectStandardError = true; P.StartInfo.RedirectStandardInput = true; P.StartInfo.RedirectStandardOutput = true; P.Start(); return P; } /// <summary> /// 執行CMD命令 /// </summary> public static string Run(string cmd) { Process P = newProcess("cmd.exe"); P.StandardInput.WriteLine(cmd); P.StandardInput.WriteLine("exit"); string outStr = P.StandardOutput.ReadToEnd(); P.Close(); return outStr; } /// <summary> /// 定義委托接口處理函數,用於實時處理cmd輸出信息 /// </summary> public delegate void Callback(String line); ///// <summary> ///// 此函數用於實時顯示cmd輸出信息, Callback示例 ///// </summary> //private void Callback1(String line) //{ // textBox1.AppendText(line); // textBox1.AppendText(Environment.NewLine); // textBox1.ScrollToCaret(); // richTextBox1.SelectionColor = Color.Green; // richTextBox1.AppendText(line); // richTextBox1.AppendText(Environment.NewLine); // richTextBox1.ScrollToCaret(); //} /// <summary> /// 執行CMD語句,實時獲取cmd輸出結果,輸出到call函數中 /// </summary> /// <param name="cmd">要執行的CMD命令</param> public static string Run(string cmd, Callback call) { Process P = newProcess("cmd.exe"); P.StandardInput.WriteLine(cmd); P.StandardInput.WriteLine("exit"); string outStr = ""; string line = ""; while ((line = P.StandardOutput.ReadLine()) != null) { if (!line.EndsWith(">exit")) { if (call != null) call(line); outStr += line + "\r\n"; } } P.Close(); return outStr; } /// <summary> /// 以進程的形式打開應用程序(d:\*.exe),並執行命令 /// </summary> public static void RunProgram(string programName, string cmd) { Process P = newProcess(programName); if (cmd.Length != 0) { P.StandardInput.WriteLine(cmd); } P.Close(); } /// <summary> /// 正常啟動window應用程序(d:\*.exe) /// </summary> public static void Open(String exe) { System.Diagnostics.Process.Start(exe); } /// <summary> /// 正常啟動window應用程序(d:\*.exe),並傳遞初始命令參數 /// </summary> public static void Open(String exe, String args) { System.Diagnostics.Process.Start(exe, args); } } }
using System; using System.Collections.Generic; using System.Diagnostics; using System.Drawing; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; namespace APK_Tool { /// <summary> /// 執行CMD命令,或以進程的形式打開應用程序(d:\*.exe) /// </summary> public class Cmd { /// <summary> /// 定義委托接口處理函數,用於實時處理cmd輸出信息 /// </summary> public delegate void Method(); /// <summary> /// 在新的線程中執行method邏輯 /// </summary> public static void ThreadRun(Method method, Form form=null, Button button=null, String Text = "執行中") { Thread thread = new Thread(delegate() { // 允許不同線程間的調用 Control.CheckForIllegalCrossThreadCalls = false; // 設置按鈕和界面按鈕不可用 String text = ""; if (form != null) form.ControlBox = false; if (button != null) { text = button.Text; button.Text = Text; button.Enabled = false; } // 執行method邏輯 if (method != null) method(); if (button != null) { button.Text = text; button.Enabled = true; } if (form != null) form.ControlBox = true; }); thread.Priority = ThreadPriority.Highest; // 設置子線程優先級 Thread.CurrentThread.Priority = ThreadPriority.Highest; // 設置當前線程為最高優先級 thread.Start(); } /// <summary> /// 以后台進程的形式執行應用程序(d:\*.exe) /// </summary> public static Process newProcess(String exe) { Process P = new Process(); P.StartInfo.CreateNoWindow = true; P.StartInfo.FileName = exe; P.StartInfo.UseShellExecute = false; P.StartInfo.RedirectStandardError = true; P.StartInfo.RedirectStandardInput = true; P.StartInfo.RedirectStandardOutput = true; //P.StartInfo.WorkingDirectory = @"C:\windows\system32"; P.Start(); return P; } /// <summary> /// 執行CMD命令 /// </summary> public static string Run(string cmd) { Process P = newProcess("cmd.exe"); P.StandardInput.WriteLine(cmd); P.StandardInput.WriteLine("exit"); string outStr = P.StandardOutput.ReadToEnd(); P.Close(); return outStr; } /// <summary> /// 定義委托接口處理函數,用於實時處理cmd輸出信息 /// </summary> public delegate void Callback(String line); ///// <summary> ///// 此函數用於實時顯示cmd輸出信息, Callback示例 ///// </summary> //private void Callback1(String line) //{ // textBox1.AppendText(line); // textBox1.AppendText(Environment.NewLine); // textBox1.ScrollToCaret(); // richTextBox1.SelectionColor = Color.Green; // richTextBox1.AppendText(line); // richTextBox1.AppendText(Environment.NewLine); // richTextBox1.ScrollToCaret(); //} /// <summary> /// 執行CMD語句,實時獲取cmd輸出結果,輸出到call函數中 /// </summary> /// <param name="cmd">要執行的CMD命令</param> public static string Run(string cmd, Callback call) { //string cmd_exe = DependentFiles.curDir() + "tools\\cmd.exe"; Process P = newProcess("cmd.exe"); P.StandardInput.WriteLine(cmd); P.StandardInput.WriteLine("exit"); string outStr = ""; string line = "", error = ""; string baseDir = System.AppDomain.CurrentDomain.BaseDirectory.TrimEnd('\\'); try { for (int i = 0; i < 3; i++) P.StandardOutput.ReadLine(); while ((line = P.StandardOutput.ReadLine()) != null || ((line = P.StandardError.ReadToEnd()) != null && !line.Trim().Equals(""))) { // cmd運行輸出信息 if (!line.EndsWith(">exit") && !line.Equals("")) { if (line.StartsWith(baseDir + ">")) line = line.Replace(baseDir + ">", "cmd>\r\n"); // 識別的cmd命令行信息 line = ((line.Contains("[Fatal Error]") || line.Contains("ERROR:") || line.Contains("Exception")) ? "【E】 " : "") + line; if (call != null) call(line); outStr += line + "\r\n"; } } } catch (Exception ex) { MessageBox.Show(ex.Message); } P.WaitForExit(); P.Close(); return outStr; } /// <summary> /// 以進程的形式打開應用程序(d:\*.exe),並執行命令 /// </summary> public static void RunProgram(string programName, string cmd) { Process P = newProcess(programName); if (cmd.Length != 0) { P.StandardInput.WriteLine(cmd); } P.Close(); } /// <summary> /// 正常啟動window應用程序(d:\*.exe) /// </summary> public static void Open(String exe) { System.Diagnostics.Process.Start(exe); } /// <summary> /// 正常啟動window應用程序(d:\*.exe),並傳遞初始命令參數 /// </summary> public static void Open(String exe, String args) { System.Diagnostics.Process.Start(exe, args); } } }
2016-08-26:新增.bat模式執行cmd,將cmd命令寫入.bat文件后執行
using System; using System.Collections.Generic; using System.Diagnostics; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; namespace APK_Tool { /// <summary> /// 執行CMD命令,或以進程的形式打開應用程序(d:\*.exe) /// </summary> public class Cmd { public static bool useBatMode = false; // 是否使用.bat模式運行工具 public static bool singleBat = true; // 是否使用單個bat文件執行操作 /// <summary> /// 定義委托接口處理函數,用於實時處理cmd輸出信息 /// </summary> public delegate void Method(); /// <summary> /// 在新的線程中執行method邏輯 /// </summary> public static void ThreadRun(Method method, Form form=null, Button button=null, String Text = "執行中", bool useThread = true) { if (useThread) { Thread thread = new Thread(delegate() { // 允許不同線程間的調用 Control.CheckForIllegalCrossThreadCalls = false; // 設置按鈕和界面按鈕不可用 String text = ""; if (form != null) form.ControlBox = false; if (button != null) { text = button.Text; button.Text = Text; button.Enabled = false; } // 執行method邏輯 if (method != null) method(); if (button != null) { button.Text = text; button.Enabled = true; } if (form != null) form.ControlBox = true; }); thread.Priority = ThreadPriority.AboveNormal; // 設置子線程優先級 Thread.CurrentThread.Priority = ThreadPriority.Highest; // 設置當前線程為最高優先級 thread.Start(); } else { // 設置按鈕和界面按鈕不可用 String text = ""; if (form != null) form.ControlBox = false; if (button != null) { text = button.Text; button.Text = Text; button.Enabled = false; } // 執行method邏輯 if (method != null) method(); if (button != null) { button.Text = text; button.Enabled = true; } if (form != null) form.ControlBox = true; } } /// <summary> /// 以后台進程的形式執行應用程序(d:\*.exe) /// </summary> public static Process newProcess(String exe) { Process P = new Process(); P.StartInfo.CreateNoWindow = true; P.StartInfo.FileName = exe; P.StartInfo.UseShellExecute = false; P.StartInfo.RedirectStandardError = true; P.StartInfo.RedirectStandardInput = true; P.StartInfo.RedirectStandardOutput = true; //P.StartInfo.WorkingDirectory = @"C:\windows\system32"; P.Start(); return P; } /// <summary> /// 創建指定命令的bat文件 /// </summary> public static string createTmpBat(String cmd) { String filePath = AppDomain.CurrentDomain.BaseDirectory + @"tools\" + (singleBat ? "CMD_FILE" : DateTime.Now.Ticks.ToString()) + ".bat"; FileProcess.SaveProcess(cmd, filePath, Encoding.Default); return filePath; } /// <summary> /// 創建包含cmd命令的.bat文件,並執行 /// </summary> public static string Run_bat(string cmd) { String bat = createTmpBat(cmd); Process P = newProcess(bat); string outStr = P.StandardOutput.ReadToEnd(); P.Close(); if (File.Exists(bat)) File.Delete(bat); return outStr; } /// <summary> /// 執行CMD命令 /// </summary> public static string Run(string cmd, bool useBatMode = true) { if (useBatMode) return Run_bat(cmd); // 使用.bat文件模式執行cmd命令 else { Process P = newProcess("cmd.exe"); P.StandardInput.WriteLine(cmd); P.StandardInput.WriteLine("exit"); string outStr = P.StandardOutput.ReadToEnd(); P.Close(); return outStr; } } /// <summary> /// 定義委托接口處理函數,用於實時處理cmd輸出信息 /// </summary> public delegate void Callback(String line); ///// <summary> ///// 此函數用於實時顯示cmd輸出信息, Callback示例 ///// </summary> //private void Callback1(String line) //{ // textBox1.AppendText(line); // textBox1.AppendText(Environment.NewLine); // textBox1.ScrollToCaret(); // richTextBox1.SelectionColor = Color.Green; // richTextBox1.AppendText(line); // richTextBox1.AppendText(Environment.NewLine); // richTextBox1.ScrollToCaret(); //} /// <summary> /// 執行CMD語句,實時獲取cmd輸出結果,輸出到call函數中 /// </summary> /// <param name="cmd">要執行的CMD命令</param> public static string Run(string cmd, Callback call/*, bool useBatMode = true*/) { //string cmd_exe = DependentFiles.curDir() + "tools\\cmd.exe"; String CMD_FILE = useBatMode ? createTmpBat(cmd) : "cmd.exe"; // 使用.bat文件模式執行cmd命令 Process P = newProcess(CMD_FILE); if (!useBatMode) { P.StandardInput.WriteLine(cmd); P.StandardInput.WriteLine("exit"); } string outStr = ""; string line = "", error = ""; string baseDir = System.AppDomain.CurrentDomain.BaseDirectory.TrimEnd('\\'); try { for (int i = 0; i < 3; i++) P.StandardOutput.ReadLine(); while ((line = P.StandardOutput.ReadLine()) != null || ((line = P.StandardError.ReadToEnd()) != null && !line.Trim().Equals(""))) { // cmd運行輸出信息 if (!line.EndsWith(">exit") && !line.Equals("")) { if (line.StartsWith(baseDir + ">")) line = line.Replace(baseDir + ">", "cmd>\r\n"); // 識別的cmd命令行信息 line = ((line.Contains("[Fatal Error]") || line.Contains("ERROR:") || line.Contains("Exception")) ? "【E】 " : "") + line; if (call != null) call(line); outStr += line + "\r\n"; } } } catch (Exception ex) { MessageBox.Show(ex.Message); } P.WaitForExit(); P.Close(); // 使用bat模式,非單個bat,執行邏輯后刪除bat文件 if (useBatMode && !singleBat && File.Exists(CMD_FILE)) File.Delete(CMD_FILE); return outStr; } /// <summary> /// 以進程的形式打開應用程序(d:\*.exe),並執行命令 /// </summary> public static void RunProgram(string programName, string cmd) { Process P = newProcess(programName); if (cmd.Length != 0) { P.StandardInput.WriteLine(cmd); } P.Close(); } /// <summary> /// 正常啟動window應用程序(d:\*.exe) /// </summary> public static void Open(String exe) { System.Diagnostics.Process.Start(exe); } /// <summary> /// 正常啟動window應用程序(d:\*.exe),並傳遞初始命令參數 /// </summary> public static void Open(String exe, String args) { System.Diagnostics.Process.Start(exe, args); } } public class FileProcess { #region 文件讀取與保存 /// <summary> /// 獲取文件中的數據串 /// </summary> public static string fileToString(String filePath) { string str = ""; //獲取文件內容 if (System.IO.File.Exists(filePath)) { bool defaultEncoding = filePath.EndsWith(".txt"); System.IO.StreamReader file1; file1 = new System.IO.StreamReader(filePath); //讀取文件中的數據 //if (defaultEncoding) file1 = new System.IO.StreamReader(filePath, Encoding.Default);//讀取文件中的數據 //else file1 = new System.IO.StreamReader(filePath); //讀取文件中的數據 str = file1.ReadToEnd(); //讀取文件中的全部數據 file1.Close(); file1.Dispose(); } return str; } /// <summary> /// 保存數據data到文件處理過程,返回值為保存的文件名 /// </summary> public static String SaveProcess(String data, String filePath, Encoding encoding = null) { //不存在該文件時先創建 System.IO.StreamWriter file1 = null; if (encoding == null) file1 = new System.IO.StreamWriter(filePath, false/*, System.Text.Encoding.UTF8*/); //文件已覆蓋方式添加內容 else file1 = new System.IO.StreamWriter(filePath, false, Encoding.Default); // 使用指定的格式進行保存 file1.Write(data); //保存數據到文件 file1.Close(); //關閉文件 file1.Dispose(); //釋放對象 return filePath; } /// <summary> /// 獲取當前運行目錄 /// </summary> public static string CurDir() { return AppDomain.CurrentDomain.BaseDirectory; } #endregion } }