الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيف أشغل برنامج بلغة بيرل داخل برنامج بلغة C#.net؟

مغلق
بدأه أبوعابد في 21 فبراير 2006 · 14 رد · 1,299 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

أريد تشغيل برنامج مكتوب بلغة بيرل من داخل برنامجي C#.net

ينفذ البرنامج في

command prompt

بالسطر

perl program.pl <input >output

فكيف أقوم بذلك بضغطة زر

من داخل البرنامج

ولكم جزيل الشكر

#2

رجاء التوضيح !! وعندي احساس أنه واجب وحل الواجبات ممنوع هنا في المنتدى.

عموما اذا كنت تستخدم Perl أو كتبت بها كود تريد اعادة استخدامه في السي شارب , فيمكن بـ Perl تقريبا الآن أن تكتب برامج لـ و بـ الدوت نت. فاذا كنت تريد استخدام Perl مع السي شارب فاكتب DLLs بها وبعد ذلك ضفها كـ Reference لبرنامج السي شارب وتعامل مع الـ DLL بطريقه عاديه. وذلك مع مع مراعاة الـ CLS.

#Read

http://MoutazShams.blogspot.com

projects003.gif

أعتذر عن التغيب هذه الأيام نظرا للانشغال المريب

#3

يمكنك باستخدام Process.Start الموجودة في System.Diagnostics بتشغيل أي برنامج أخر من داخل برنامجك

Sr. Software Development Engineer
Hulu, LLC
My Blogs

#4

على العموم ليس واجب

وجدت برنامج يتعامل مع النصوص مكتوب بلغة بيرل

وأريد أن أرسل المدخلات من

text box

وأعرض المخرجات في

text box

آخر

لاغير

أريد أن يظهر البرنامج وكأنه جزء داخل البرنامج بحيث لا يعلم المستخدم أن هناك برنامج آخر

أريد أن أستخدم هذا البرنامج كجزء من البرنامج

لأن برنامجي أكبر من كذا

ووجدت برنامج بلغة البيرل يقوم بجزء من العمل

بدل أن أعيد كتابته أريد استدعائه داخل برنامجي

remote-call .or something

وشكراً

#5

اذا فاستخدم Process الموجوده في Diagnostics كما قال bashmohandes واجعل الـ CreateNoWindow بـ true حتى لا تظهر نافذة البرنامج الآخر للمستخدم. وأيضا اجعل RedirectStandardOutput بـ true و UseShellExecute بـ false حتى نسترجع المخرجات في StreamReader جديد نصل له من خلال الخاصيه StandardOutput وبعد ذلك نتعامل معه كما نريد.

مثلا :

System.Diagnostics.Process yourPro = new System.Diagnostics.Process();
yourPro.StartInfo = new System.Diagnostics.ProcessStartInfo("yourApp","yourArgs");
yourPro.StartInfo.CreateNoWindow = true;
yourPro.StartInfo.RedirectStandardOutput = true;
yourPro.StartInfo.UseShellExecute = false;
yourPro.Start();
yourOutputTextBox.Text = yourPro.StandardOutput.ReadToEnd();

طبعا StandardOutput ترجع StreamReader بالمخرجات وأنا استخدمت ReadToEnd مباشرة , ولكن يمكنك أنت على حسب الـ OutPut أن تستخدم الـ Methods الأخرى الموجوده الخاصه بقراءة أجزاء أو أسطر محدده مثل ReadBlock و Read و ReadLine والخ.

أيضا في الـ Constructor الخاص بالـ ProcessStartInfo تمرر أولا عنوان البرنامج ثم الـ Arguments. ويمكنك استبدال yourArgs بالـ TextBox.Text الخاص بالمدخلات Input.

تم تعديل هذه المشاركة بواسطة معتز شمس في 21 فبراير 2006 في 16:21

#Read

http://MoutazShams.blogspot.com

projects003.gif

أعتذر عن التغيب هذه الأيام نظرا للانشغال المريب

#6

معتز كيف يمكن أرسال Text إلي App ؟؟؟

تم تعديل هذه المشاركة بواسطة R0OT في 22 فبراير 2006 في 08:21

#7

هل هذا استفسار أم تعليق على الكود أخي R0OT :) ؟ لم أفهم , عموما أنت ترسل الـ Arguments للبرنامج كـ string وبالطبع البرنامج الآخر يجب ان يكون مهيئ نفسه لذلك بوضع الكود المناسب في الـ ()Main حتى يستقبل ويتعامل مع هذه الـ Arguments. والـ Arguments تكون دائما string. تماما كما نكتب Ping Yahoo.com فنحن به نفتح برنامج Ping ونمرر له اسم موقع أو رقم IP كـ string وPing مهيئ نفسه للتعامل مع الأشياء التي تمرر له.

#Read

http://MoutazShams.blogspot.com

projects003.gif

أعتذر عن التغيب هذه الأيام نظرا للانشغال المريب

#8

هذا أستفسار أريد علي سبيل المثال أرسال أوامر لل cmd و تكملتها في نفس ال Process

#9

للأسف لم يعمل معي الحل جيداً

تمكنت من حلها بالطريقة

System.Diagnostics.Process myProcess = new System.Diagnostics.Process();

 	 myProcess.StartInfo.FileName="cmd.exe";
 	 
 	 
 	 myProcess.StartInfo.RedirectStandardInput=true;

 	 
 	 myProcess.StartInfo.CreateNoWindow = true;
 	 

 	 myProcess.StartInfo.UseShellExecute = false;

 	 
 	 myProcess.Start();

 	 myProcess.StandardInput.WriteLine("perl program.pl <input.txt >output.txt");
 	 
 	 myProcess.Close();

بحيث اشغل

command prompt

واكتب فيه الأمر

ولكن أعتقد أنها طريقة متخلفة

هل من طريقة أفضل

جزيتم خيرا

#10

برضه رجعنه تاني لل txt :(

#11

مفيش حل يعني يا جماعة ؟؟؟ في أيه يا معتز ؟؟؟ مفيش أجابة عندك ؟؟؟

#12

أنا مش فاهمك يا R0OT ! اشرح ماتريد عمله بطريقه مفصله قليلا. فماذا تقصد بمشكلة الـ Text ؟ فالكود يرسل الـ Arguments كنص ويستقبل الـ Output كنص أيضا. فأين المشكله ؟ ماذا تريد أن تفعل تحديدا ؟

#Read

http://MoutazShams.blogspot.com

projects003.gif

أعتذر عن التغيب هذه الأيام نظرا للانشغال المريب

#13

فكرة بسيطة كنت دوبت فيها بالفيجوال بيسك 6 و عملتها بس بال api عاوز أدخل أوامر و أخد إلي طالع من ال cmd بس دي صعبة ؟؟؟ عارف شبه أيه شبة ال Console في ال SharpDevelop بس

#14

ماهو الكود اللي أنا كتبته فوق بيعمل كدا تماما يا R0OT (h) !

اكتب هذا الكود ,فانه يرسل أمر Ping Yahoo.com للـ CMD ويستقبل المخرجات كالتي تظهر تماما في الـ CMD اذا كتبنا نفس الأمر هناك ! :

System.Diagnostics.Process yourPro = new System.Diagnostics.Process();
yourPro.StartInfo = new System.Diagnostics.ProcessStartInfo("Ping","yahoo.com");
yourPro.StartInfo.CreateNoWindow = true;
yourPro.StartInfo.RedirectStandardOutput = true;
yourPro.StartInfo.UseShellExecute = false;
yourPro.Start();
System.IO.StreamReader myR = yourPro.StandardOutput;
MessageBox.Show(myR.ReadToEnd()); myR.Close();

ويمكنك بعد ذلك حفظ المخرجات في ملف اذا أردت من خلال StreamWriter أو بارسال الأمر الخاص بذلك مباشرة.

تم تعديل هذه المشاركة بواسطة معتز شمس في 26 فبراير 2006 في 05:18

#Read

http://MoutazShams.blogspot.com

projects003.gif

أعتذر عن التغيب هذه الأيام نظرا للانشغال المريب

#15

طيب أنت لم تغلق ال yourPro.StartInfo و هذا هو المطلوب و لكني أريد أعادة أرسال أمر أخر بنفس الطريقة مدام yourPro.StartInfo لسه شغال المفروض أنه يرسل أي عدد من الأوامر و السؤال هو , كيف ؟؟؟

هذا الموضوع مغلق.

مواضيع مشابهة