一、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:javascript:void(0)


三、C# Getting Current Native Thread (操作系统进程线程)

The native OS threads running in the current process are exposed through the ThreadsC#之Process_外部程序 property of the ProcessC#之Process_外部程序_02 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();