تنفيذ C ++ exe من نموذج C# باستخدام Process.start ()
-
22-09-2019 - |
سؤال
أحاول إنشاء تطبيق نموذج C# يسمح لي باستخدام جميع برامج C ++ السابقة من برنامج مركزي واحد.
أنا قادر على فتح exes Process.Start()
, ، ومع ذلك فإنه لا يقوم بتجميع الكود بشكل صحيح.
رمز المثال:
Process.Start("C:\\\Documents and Settings\\\dan\\\Desktop\\\test.exe");
سيؤدي ذلك إلى إحضار وحدة التحكم ويتصرف كما لو كانت قيد التشغيل ، لكنه لا يتم تشغيله عندما أقوم عادةً بتجميع محرر C ++. هل يوجد startinfo
متغير أحتاج إلى تعيينه للدلالة على أنه برنامج C ++ أو شيء ما على طول هذا الخط؟
أيضًا ، هل هناك أي طريقة لتنفيذ برنامج C ++ باستخدام process.start
سيسمح لي ذلك بتمرير المتغيرات من خلال سطر الأوامر عبر argc
و argv
?
شكرًا
المحلول
لا يوجد سوى بعض الاختلافات عند استخدام العملية. ابدأ بالطريقة التي قمت بها مقابل تنفيذ البرنامج مباشرة. يمكن معالجة كلاهما باستخدام ProcessStartInfo.
- ال عمل اخراجي لن يكون هو نفسه. اضبط هذا على المسار الذي يحتوي على القابل للتنفيذ للحصول على نفس السلوك.
- جلس Useshellexecute صحيح ، لذلك يتم استخدام قذيفة Windows لتنفيذ العملية.
أما بالنسبة لإضافة وسيطات سطر الأوامر: يمكنك القيام بذلك عبر ProcessStartInfo.arguments. لا ينبغي أن يكون هناك واحد مطلوب بسبب كونه تطبيق C ++ ، ولكن.
نصائح أخرى
حتى الآن لا يوجد سوى معلومات كافية للإجابة على سؤالك الأخير. نعم ، يمكنك تضمين وسيطات سطر الأوامر مثل يظهر هنا. انظر إلى القسم الذي يحمل عنوان "=== البرنامج الذي يعمل EXE (C#) ==="
لإضافة وسيطات سطر الأوامر:
Process process = new Process();
process.StartInfo.FileName = "C:\\Documents and Settings\\dan\\Desktop\\test.exe";
process.StartInfo.Arguments = ""; // Put your arguments here
process.Start();
بعد تجميع البرنامج في EXE ، لا ينبغي أن يهم اللغة التي كتبت فيها.
أما بالنسبة لحجج البرنامج ، فأنت بحاجة إلى إلقاء نظرة على فئة ProcessStartInfo ، وتجاوز العملية. Process.start (ProcessStartInfo)
واجهت مشكلة مماثلة في بيثون ، هل تتوقع إخراج مطوّل؟
في حالتي ، أصبح المخزن المؤقت للإخراج ممتلئًا وبالتالي توقف التنفيذ.