مقدمة في العمليات Processes والكلاس Process


سنتناول في هذا الدرس شرح فئة Class مهمة جداً  في البرامج والتي هي Process أي "عملية" ,, التي تمكننا من تشغيل برنامج معين او أداة معينة من أدوات نظام التشغيل. والتحكم بالعمليات (إيقاف - تشغيل - تغيير الأفضلية) التي تعمل على الجهاز الحالي أو على جهاز آخر (Remote Processes).


  الفئة System.ProcessSystem.Process class:


الفئة Process توجد ضمن النطاق (Namespace) الذي هو System.Diagnostics, ما يلي شرح بسيط لأهم الخصائص والاجراءات التي توجد في الفئة (الكلاس) Process:

الفئة Process Process Class

بدء (تنفيذ) العملية ,, يمكن تمرير بارامترات لهذا التابع أهمها: مسار البرنامج filename – معاملات التشغيل arguments
Start()
إغلاق العملية بشكل طبيعي مما يعطي نظام التشغيل الفرصة لتحرير موارد النظام التي كانت تستعملها العملية
Close()
إغلاق العملية فوراً وبشكل قسري, مما قد يؤدي لفقدان المعلومات التي كان يعمل عليها المستخدم
Kill()
جلب العملية التي يعمل من خلالها المستخدم الحالي اي العملية المرتبطة بالبرنامج الذي طلب تنفيذ هذا التابع
GetCurrentProcess()
جلب عملية بواسطة رقمها التعريفي والذي هو رقم فريد يعطيه نظام التشغيل للعملية عند "تشغيلها"
GetProcessById()
جلب مصفوفة تحوي العملية (العمليات) التي لها الاسم الممرر للتابع
GetProcessByName()
جلب مصفوفة تحوي كافة العمليات التي تعمل على الجهاز الحالي
GetProcesses()
هذه الخاصية تجلب الرقم العريفي للعملية
Id
هذه الخاصية تجلب اسم العملية
ProcessName
هذه الخاصية ترجع لنا قيمة Boolean تبين حالة العملية (تستجيب – عدم الاستجابة)
Responding
ترجع لنا كائن StreamWriter الذي يمكننا استخدامه لإرسال بيانات للعملية
StandardInput
ترجع لنا كائن StreamReader الذي يمكننا استخدامه لجلب البيانات الناتجة من تنفيذ اوامر من قبل العملية
StandardOutput
تمكننا من جلب او ارسال معاملات التشغيل للعملية مثل: وضعية نافذة العملية – اسم ملف لفتحه بواسطة العملية
StartInfo
تجلب مصفوفة تحوي الخيوط (ترجمة مرعبة J) التي تعمل ضمن العملية
Threads
معرفة او تحديد أفضلية العملية ( عادي – مرتفع – منخفض)
PriorityClass
اسم الكمبيوتر التي تعمل عليه العملية
MachineName


  مثال عملي:

سنقوم بكتابة مثال بسيط يقوم بالبحث عن العملية "explorer.exe" ثم إغلاقها ,, الكود:

اولاً يجب ان نقوم باستيراد المكتبة System.Diagnostics:
Imports System.Diagnostics
using System.Diagnostics;

ثانياً كود البحث والإغلاق:
Process.GetProcessesByName("explorer"))0(.Kill()
Process.GetProcessesByName("explorer")[0].Kill();

الكود بسيط جداً !! نقوم باستخدام التابع GetProcessesByName للبحث عن العملية explorer التي هي مستعرض النظام ,, وبما ان هذا التابع يقوم بجلب مصفوفة بالعمليات التي لها نفس الاسم , لذلك نقوم بتحديد النتيجة الاولى في المصفوفة الناتجة والذي له الرقم 0 كما نعرف في المصفوفات.

بقي فقط استخدام التابع Kill() لإغلاق هذه العملية .. لا تقلق فإن نظام التشغيل سيقوم بإعادة تشغيلها نيابة عنك.


  الفئة System.ProcessStartInfo:


الفئة ProcessStartInfo هي فئة مهمة ومفيدة جداً عند استخدام العمليات Processes, فهي تمكننا من تمرير قيم ومعاملات تستخدم عند "تشغيل العملية" مما يعطينا خيارات إضافة عند تشغيل العملية ,, الصورة التالية يجب ان توضح ما اقصد:


process-start-info-arguments


الفئة ProcessStartInfo توجد ايضاً ضمن النطاق System.Diagnostics, ما يلي شرح بسيط لأهم الخصائص والاجراءات التي توجد في الفئة (الكلاس) ProcessStartInfo:

الفئة ProcessStartInfo ProcessStartInfo Class

جلب او ارسال معاملات بدء تشغيل العملية أو "سطر الاوامر" والتي يمكن استخدامها مثلاً لفتح ملف نصي اذا كان البرنامج الذي سيعمل هو المفكرة (انظر الصورة السابقة)
Arguments
تحديد او معرفة: هل ستظهر نافذة البرنامج عند تشغيل العملية
CreateNoWindow
تحديد او معرفة: اسم البرنامج, او اسم الملف الذي سيفتح بوسطة البرنامج عند تشغيل العملية (مثال المفكرة كما شرحت قبل قليل)
FileName
تحديد او معرفة: هل ستقرأ العملية البيانات التي ارسلت بواسطة الخاصية StandardInput التابعة للعملية Process, راجع هذه الخاصية في الجدول السابق
RedirectStandardInput
تحديد او معرفة: هل يمكن قراءة البيانات الناتجة عن تنفيذ اوامر على العملية المحددة والتي يمكن جلبها من الخاصية StandardOutput التابعة للعملية Process, راجع هذه الخاصية في الجدول السابق
RedirectStandardOutput
تحديد او معرفة: هل ستعمل العملية من خلال Shell (قشرة نظام التشغيل) في حال كانت قيمة الخاصية True, أو ستعمل من الملف التنفيذي للعملية مباشرة في حال كانت قيمة الخاصية False
من اجل ان نستطيع قراءة Stream البيانات الناتجة من تنفيذ اوامر على العملية يجب ان تكون قيمة هذه الخاصية False
UseShellExecute
تحديد او معرفة: وضعية نافذة البرنامج عند تشغيل العملية اي (تكبير – تصغير – عادي)
WindowStyle
تحديد او معرفة: المجلد الذي يعمل فيه الملف التنفيذي للعملية
WorkingDirectory


  مثال عملي:

سنقوم بكتابة مثال يقوم بفتح ملف نصي txt باستخدام برنامج المفكرة:

Dim p As New Process
Dim pInfo As New ProcessStartInfo

pInfo.FileName = "notepad.exe"
pInfo.Arguments = "C:\test.txt"

p.StartInfo = pInfo
p.Start()
Process p = new Process();
ProcessStartInfo pInfo = new ProcessStartInfo();

pInfo.FileName = "notepad.exe";
pInfo.Arguments = "C:\\test.txt";

p.StartInfo = pInfo;
p.Start();

في البداية قمنا بتعريف كائن من الفئة Process اي عملية جديدة , ثم كائن من الفئة ProcessStartInfo وهو لإضافة معلومات لتشغيل العملية مثل اسم البرنامج واسم الملف الذي سيتم فتحه بواسطة البرنامج.

بعد ذلك حددنا اسم البرنامج والذي هو notepad.exe اي المفكرة عن طريق الخاصية FileName.
يجب ان تنتبه ان اسم البرنامج يجب يكون كاملاً اي مسار البرنامج واسمه ,, ولكننا في هذه الحالة وضعت اسم البرنامج فقط لأنه برنامج من برامج النظام مثله مثل برنامج الرسام Paint والالة الحاسبة Calculator.
بعد ان حددنا اسم البرنامج , نقوم بتحديد اسم ومسار الملف النصي الذي سنفتحه بواسطة المفكرة عن طريق الخاصية Arguments والتي شرحناها في الجدول السابق.

أخيراً بقي اسناد الكائن pInfo للخاصية StartInfo التابعة للكائن p اي العملية التي ستشغل برنامج المفكرة ,, ثم تشغيل البرنامج بواسطة التابع Start().


في الدرس القادم سنقوم ببرمجة مثال اوضح واكثر تقدماً يقوم بـ : تنفيذ اوامر MS-Dos ورؤية ناتج تنفيذ الاوامر.



8 تعليقات

عفواً ,, أهلاً وسهلا بك أخي الكريم

رد
أزال أحد مشرفي المدونة هذا التعليق.
أزال أحد مشرفي المدونة هذا التعليق.
أزال أحد مشرفي المدونة هذا التعليق.
أزال أحد مشرفي المدونة هذا التعليق.
أزال أحد مشرفي المدونة هذا التعليق.
أزال أحد مشرفي المدونة هذا التعليق.

إرسال تعليق