伊莉討論區

標題: 利用C#執行CMD指令 [打印本頁]

作者: 9pk9pk9pk    時間: 2014-12-14 12:58 PM     標題: 利用C#執行CMD指令

有A電腦和B電腦
A、B電腦需要溝通
有可能是從A電腦下指令傳送到B電腦執行
也有可能反之
我想問的是
C#語法該如何使用CMD指令
-
完全沒學過C#突然被丟一個專案
時間也不夠學
突然覺得好殘酷阿 社會

作者: Jeepluo    時間: 2014-12-17 11:08 PM

應該是用不到用cmd去下指令回應,好記得好像 有函數可以使用,在 vb 有一個 My.Computer.Network.Ping 我想 C# 也應該有,只是手頭目前沒有有裝Visual Studior只能給你線索查查看了。
作者: Jeepluo    時間: 2014-12-17 11:12 PM

這裡有幾段指令看看是否可行
  1. // args[0] can be an IPaddress or host name.
  2.     public static void Main (string[] args)
  3.     {
  4.         Ping pingSender = new Ping ();
  5.         PingOptions options = new PingOptions ();

  6.         // Use the default Ttl value which is 128,
  7.         // but change the fragmentation behavior.
  8.         options.DontFragment = true;

  9.         // Create a buffer of 32 bytes of data to be transmitted.
  10.         string data = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
  11.         byte[] buffer = Encoding.ASCII.GetBytes (data);
  12.         int timeout = 120;
  13.         PingReply reply = pingSender.Send (args[0], timeout, buffer, options);
  14.         if (reply.Status == IPStatus.Success)
  15.         {
  16.             Console.WriteLine ("Address: {0}", reply.Address.ToString ());
  17.             Console.WriteLine ("RoundTrip time: {0}", reply.RoundtripTime);
  18.             Console.WriteLine ("Time to live: {0}", reply.Options.Ttl);
  19.             Console.WriteLine ("Don't fragment: {0}", reply.Options.DontFragment);
  20.             Console.WriteLine ("Buffer size: {0}", reply.Buffer.Length);
  21.         }
  22.     }
複製代碼
  1. Microsoft.VisualBasic.Devices.Network net = new Network();
  2. bool success = net.Ping("填網址");
複製代碼
  1. public bool Ping(host)
  2. {
  3.     System.Net.NetworkInformation.Ping p = new System.Net.NetworkInformation.Ping();
  4.     if (p.Send(host, 500).Status == System.Net.NetworkInformation.IPStatus.Success) {
  5.         return true;
  6.     } else {
  7.         return false;
  8.     }
  9. }
複製代碼

作者: winergogogo    時間: 2014-12-24 11:47 PM

提示: 作者被禁止或刪除 內容自動屏蔽
作者: wupojung    時間: 2014-12-28 10:23 AM

本帖最後由 wupojung 於 2014-12-28 10:24 AM 編輯

我們來談談傳遞吧...XD

A  <->  B  有幾個方式?  (先談硬體..)
1) RJ45(網路)跳線直接連  或者 都接到 Hub 上面
2) RS232 將 RX TX 對接....  
3) 買一條USB 傳遞線(有晶片的那種 ...其實也是模擬成RS232...)  <我把問題複雜化,通常沒有人這樣搞....>

讓我們來談談軟體怎麼解決?
針對1) 走網路的模式...
你必須建立網路的服務...通常是寫 socket...
但是以現在的技術..你可以讓A 跟B 都是Web Server 然後定時互相通訊... (都上web server了,可以用js' webapi ...任何可以溝通的界面都可以)

針對2) 走ComPort 的方式...
就直接寫 RS232 的  code 就好了..注意那條線 要買對倒是真的...

--------------
還有其他解答方法嗎????
How about  MQTT ? (自己google ... eney 不讓我貼網址.. T^T)
其實 MQTT 只是把 socket 包裝好了.....

--------------
你的"問題" 真實的解法是....
兩台 電腦都開SSH 的後台... 然後直接用  telnet 連進去...互相操作...
(不過我想如果是這樣的解法...你應該不會上來問才對....)
為甚麼我這麼說...  
用  cmd 命令 讓兩台電腦傳遞資料(你的命令就是資料) 最快的方式 就是登入對方電腦! 然後直接下命令....
所以不是你問題寫錯了...就是我....誤解您的意思了~~  
希望對您有幫助...








作者: q123asdzxc    時間: 2015-2-27 03:59 PM

本帖最後由 arthurliuliu 於 2015-3-19 08:36 AM 編輯

不清楚你的目的是什麼
但如果只是單純只是想用C#語法使用CMD指令
你可以試試這個

  1. public string cmd(string strinput)
  2.         {
  3.             System.Diagnostics.Process p = new System.Diagnostics.Process();
  4.             p.StartInfo.FileName = "cmd.exe";
  5.             p.StartInfo.UseShellExecute = false;
  6.             p.StartInfo.RedirectStandardInput = true;
  7.             p.StartInfo.RedirectStandardOutput = true;
  8.             p.StartInfo.RedirectStandardError = true;
  9.             p.StartInfo.CreateNoWindow = true; //不跳出cmd視窗
  10.             string strOutput = null;
  11.             p.Start();
  12.             p.StandardInput.WriteLine(strinput);
  13.             p.StandardInput.WriteLine("exit");
  14.             strOutput = p.StandardOutput.ReadToEnd();//匯出整個執行過程
  15.             p.WaitForExit();
  16.             p.Close();
  17.             return strOutput;
  18.         }
複製代碼
程式碼未依規定包覆,版主代為編輯。



作者: min721107    時間: 2020-4-15 02:23 PM

可以寫一支service,分別安裝在A電腦和B電腦,透過Socket方式通訊來達到你要的目的




歡迎光臨 伊莉討論區 (http://a04.eyny.com/) Powered by Discuz!