تنفيذ أوامر Ms-Dos في برامج C# & VB.Net


اليوم في هذا الدرس البسيط والسريع سنشرح كيف ننفذ تعليمة MS-Dos في موجه الأوامر مع رؤية الناتج ,, مما يمكننا من استخدام تعليمات dos المفيدة في برامجنا. بعد ما شرحنا في الدرس الماضي كيفية التعامل مع الكلاس Process والكلاس ProcessStartInfo , واستعرضنا أهم خصائص وتوابع هذين الكلاسين.
 


execute command prompt commands in c# and vb.net


  الشرح:


لتنفيذ امر في موجه الأوامر يجب اولاً تشغيل موجه الأوامر "cmd.exe" او "cmd" (لأنه موجود في مجلد system32).

ثم نأتي لأهم نقطة:

كي نرسل أمر إلى موجه الأوامر يجب ان نكتب هذا الأمر مع بارامترات أو معاملات التشغيل لموجه الأوامر أو "Arguments" .. ولذلك نكتب البارامتر ""/c  ثم بعده نكتب تعليمة الدوس التي نريد تنفيذها ,, وهذا مثال لتنفيذ تعليمة  "Dir":
cmd.exe /c dir 
الصورة التالية تعبر عن هذا الأمر (خصائص موجه الأوامر)


command prompt properties خصائص موجه الاومر


الأن لننتقل إلى الكود:


أولاً استيراد المكتبة Diagnostics لتنفيذ عملية تشغيل تعليمة دوس:
Imports System.Diagnostics
using System.Diagnostics;

 الأن نعرف متغير من نوع ProcessStartInfo وهذا الكائن يمكننا من تحديد بعض الخيارات والمعاملات التي تستخدم لبدء عملية تنفيذ تعليمة دوس:
Dim procInfo As ProcessStartInfo = New ProcessStartInfo("cmd")
ProcessStartInfo procInfo = new ProcessStartInfo("cmd");

طبعاً قمنا بتمرير اسم البرنامج والذي هو cmd لتشغيل موجه الأوامر.

بعد ذلك نمرر معاملات التشغيل Arguments:
procInfo.Arguments = "/c " & TextBox1.Text.Trim()
procInfo.Arguments = "/c " + TextBox1.Text.Trim();

من أجل عرض نتيجة تنفيذ الأمر نستخدم الخاصية التالية ونجعل قيمتها True:
procInfo.RedirectStandardOutput = True
procInfo.RedirectStandardOutput = true;

ومن اجل ان يتم نحصل على نتيجة التنفيذ يجب تعين قيمة False للخاصية التالية:
procInfo.UseShellExecute = False
procInfo.UseShellExecute = false;

الأن بقي ان نعرف متغير من نوع Process لتنفيذ عملية تشغيل موجه الأوامر:
Dim proc As Process = New Process()
Process proc = new Process();

ثم تحديد خيارات ومعاملات التشغيل لهذه العملية اي الكائن procInfo الذي عرفناه قبل قليل:
proc.StartInfo = procInfo
proc.StartInfo = procInfo;
الأن تنفيذ العملية:
proc.Start()
proc.Start();

لعرض نتيجة تنفيذ الكود نستخدم الخاصية  StandardOutputالتي تعود بالنتيجة على شكل StreamReader:
Dim result As String = proc.StandardOutput.ReadToEnd()
TextBox2.Text = result
String result = proc.StandardOutput.ReadToEnd();
TextBox2.Text = result;

  خيارات إضافية:


من أجل عدم عرض نافذة موجه الأوامر (النافذ السوداء) ,, نكتب التالي:
procInfo.CreateNoWindow = True
procInfo.CreateNoWindow = true;