سؤال

الموضوع لا يقول الكثير من السبب في أنه ليس من السهل الاستجواب في سطر واحد. لا بد لي من تنفيذ بعض البرامج التي قرأتها من السجل. يجب أن أقرأ من حقل حيث يحفظ شخص ما المسارات والحجج بأكملها.
لقد كنت أستخدم System.Diagnostics.ProcessStartInfo إعداد اسم البرنامج وحججه ، لكنني وجدت مجموعة واسعة من الوسائط التي يجب علي تحليلها لحفظ الملف القابل للتنفيذ في حقل واحد وحججه في الآخر.

هل هناك طريقة لتنفيذ السلسلة بأكملها كما هي؟

هل كانت مفيدة؟

المحلول

لقد تعاملت مع هذا بنفس الطريقة مثل الملصق أعلاه ، باستخدام cmd.exe مع معلومات بدء العملية.

Process myProcess = New Process;
myProcess.StartInfo.FileName = "cmd.exe";
myProcess.StartInfo.Arguments = "/C " + cmd;
myProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
myProcess.StartInfo.CreateNoWindow = True;
myProcess.Start();
myProcess.WaitForExit();
myProcess.Close();

يقوم CMD /C بتنفيذ الأمر ، ثم ينتهي. سوف ينهي Waitforexit العملية إذا كانت تعمل لفترة طويلة.

نصائح أخرى

هناك العديد ، في الواقع.

  1. يمكنك استدعاء cmd.exe مع /c [سطر الأوامر الخاص بك] كوسائط. هذا يسبب cmd.exe لمعالجة الأمر الخاص بك ، ثم استقال.
  2. يمكنك كتابة الأمر إلى ملف دفعة وإطلاق ذلك.

وبالطبع هناك النهج الذي تتبعه الآن ، وهو تحليل سطر الأوامر.

متي 'Useshellexecuteلم يتم تعيينها ، System.Diagnostics.Process Calls أيضًا عمليه الخلق أو CreateProcessasuser لبدء برنامج بالفعل (يستخدم البرنامج الثاني إذا قمت بتحديد مستخدم/مجال/كلمة مرور). ويمكن لكلا من هذه المكالمات أخذ الأمر والملف كوسيطة واحدة. من MSDN:

يمكن أن تكون معلمة lpapplicationName فارغة. في هذه الحالة ، يجب أن يكون اسم الوحدة النمطية هو الرمز المميز للمساحة البيضاء في سلسلة LPCommandline. ...

خرائط اسم LPPlication إلى ProcessStartInfo.Filename و LPCommandline خرائط للوسائط. لذلك يجب أن تكون على الرغم من أن تذهب فقط:

var processStartInfo = new ProcessStartInfo()
{
    UseShellExecute = false,
    Arguments = cmd
};
Process.Start(processStartInfo);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top