এই কাজ করা উচিত. কী ঘটছে তা জানতে আপনি আউটপুট এবং ত্রুটির স্ট্রিমগুলির বিষয়বস্তু ফেলে দেওয়ার চেষ্টা করতে পারেন:
static void ExecuteCommand(string command)
{
int exitCode;
ProcessStartInfo processInfo;
Process process;
processInfo = new ProcessStartInfo("cmd.exe", "/c " + command);
processInfo.CreateNoWindow = true;
processInfo.UseShellExecute = false;
// *** Redirect the output ***
processInfo.RedirectStandardError = true;
processInfo.RedirectStandardOutput = true;
process = Process.Start(processInfo);
process.WaitForExit();
// *** Read the streams ***
// Warning: This approach can lead to deadlocks, see Edit #2
string output = process.StandardOutput.ReadToEnd();
string error = process.StandardError.ReadToEnd();
exitCode = process.ExitCode;
Console.WriteLine("output>>" + (String.IsNullOrEmpty(output) ? "(none)" : output));
Console.WriteLine("error>>" + (String.IsNullOrEmpty(error) ? "(none)" : error));
Console.WriteLine("ExitCode: " + exitCode.ToString(), "ExecuteCommand");
process.Close();
}
static void Main()
{
ExecuteCommand("echo testing");
}
* সম্পাদনা *
নীচে আপনার মন্তব্যে অতিরিক্ত তথ্য দেওয়া, আমি সমস্যাটি পুনরায় তৈরি করতে সক্ষম হয়েছি। এমন কিছু সুরক্ষা সেটিংস রয়েছে যা এই আচরণের ফলাফল দেয় (এটি বিস্তারিতভাবে তদন্ত করেনি)।
এই করে কাজ যদি ব্যাচ ফাইল সঙ্গে না মেলে C:\Windows\System32
। এটিকে অন্য কোনও স্থানে নিয়ে যাওয়ার চেষ্টা করুন, যেমন আপনার সম্পাদনকারীর অবস্থান। নোট করুন যে উইন্ডোজ ডিরেক্টরিতে কাস্টম ব্যাচ ফাইলগুলি বা এক্সিকিউটেবলগুলি রাখা যাইহোক খারাপ অভ্যাস।
* সম্পাদনা 2 *
এটি সক্রিয় যে স্ট্রিমগুলি সমকালীনভাবে পড়লে, একটি অচলাবস্থার সৃষ্টি হতে পারে, হয় আগে সিঙ্ক্রোনালি পড়ে WaitForExit
বা উভয় stderr
এবং stdout
একের পর এক সিঙ্ক্রোনালি পড়ে।
পরিবর্তে অ্যাসিনক্রোনাস পড়ার পদ্ধতিগুলি ব্যবহার করা গেলে এটি ঘটতে হবে না, যেমন নিম্নলিখিত উদাহরণ হিসাবে:
static void ExecuteCommand(string command)
{
var processInfo = new ProcessStartInfo("cmd.exe", "/c " + command);
processInfo.CreateNoWindow = true;
processInfo.UseShellExecute = false;
processInfo.RedirectStandardError = true;
processInfo.RedirectStandardOutput = true;
var process = Process.Start(processInfo);
process.OutputDataReceived += (object sender, DataReceivedEventArgs e) =>
Console.WriteLine("output>>" + e.Data);
process.BeginOutputReadLine();
process.ErrorDataReceived += (object sender, DataReceivedEventArgs e) =>
Console.WriteLine("error>>" + e.Data);
process.BeginErrorReadLine();
process.WaitForExit();
Console.WriteLine("ExitCode: {0}", process.ExitCode);
process.Close();
}
command
। যদি এটিতে ফাঁকা জায়গাগুলি সহ পাথ থাকে তবে আপনার চারপাশে উদ্ধৃতি লাগানো দরকার।