一、C#中利用process类调用外部程序以及执行dos命令
c#中的Process类可方便的调用外部程序,所以可以通过调用cmd.exe程序加入参数 "/c " + 要执行的命令来执行一个dos命令
(/c代表执行参数指定的命令后关闭cmd.exe /k参数则不关闭cmd.exe)
class ExampleOfLegalsoft { private string RunCmd(string command) { //實例一個Process類,啟動一個獨立進程 Process p = new Process(); //Process類有一個StartInfo屬性,這個是ProcessStartInfo類,包括了一些屬性和方法,下面我們用到了他的幾個屬性: p.StartInfo.FileName = "cmd.exe"; //設定程序名 p.StartInfo.Arguments = "/c " + command; //設定程式執行參數 p.StartInfo.UseShellExecute = false; //關閉Shell的使用 p.StartInfo.RedirectStandardInput = true; //重定向標準輸入 p.StartInfo.RedirectStandardOutput = true; //重定向標準輸出 p.StartInfo.RedirectStandardError = true; //重定向錯誤輸出 p.StartInfo.CreateNoWindow = true; //設置不顯示窗口 p.Start(); //啟動 //p.StandardInput.WriteLine(command); //也可以用這種方式輸入要執行的命令 //p.StandardInput.WriteLine("exit"); //不過要記得加上Exit要不然下一行程式執行的時候會當機 return p.StandardOutput.ReadToEnd(); //從輸出流取得命令執行結果 } }
二、Process.WaitForExit() and Deadlock
Link:http://www.cnblogs.com/kissknife/archive/2009/09/07/1561629.html
三、C# Getting Current Native Thread (操作系统进程线程)
The native OS threads running in the current process are exposed through the Threads property of the Process class. Please note that this is not the same as a managed thread, these are the actual native threads running on the operating system.
In order to get a pointer to the current executing thread, we must use P/Invoke. Here's how we do it:
[DllImport("kernel32.dll")]
publicstaticexternUInt32 GetCurrentThreadId();
UInt32 id = GetCurrentThreadId();
ProcessThread thread = Process.GetCurrentProcess().Threads.Cast<processthread>().Where(t => t.Id == id).Single();