У меня следующий код
using (StreamWriter outfile = new StreamWriter(@"f:\trial.cpp")) { outfile.Write(txtCode.InnerText); } System.Diagnostics.ProcessStartInfo procStartInfo = new System.Diagnostics.ProcessStartInfo(@"cl.exe", @" 'trial.cpp'"); procStartInfo.RedirectStandardOutput = true; procStartInfo.UseShellExecute = false; procStartInfo.UserName = "asdasd"; SecureString secureString = new SecureString(); foreach (char c in "abcded") { secureString.AppendChar(c); } procStartInfo.Password = secureString; // Do not create the black window. procStartInfo.CreateNoWindow = true; procStartInfo.WorkingDirectory = @"f:\"; // Now we create a process, assign its ProcessStartInfo and start it System.Diagnostics.Process proc = new System.Diagnostics.Process(); proc.StartInfo = procStartInfo; proc.Start(); // Get the output into a string string result = proc.StandardOutput.ReadToEnd();
Как передать имя файла в качестве параметра?Вышеупомянутый код не запускается, и я перепробовал весь путь, разные варианты пути.
Может кто-нибудь помочь?
РЕДАКТИРОВАТЬ :
startInfo.CreateNoWindow = false; startInfo.UseShellExecute = false; startInfo.FileName = "CL.exe"; startInfo.WindowStyle = ProcessWindowStyle.Hidden; startInfo.Arguments = "trial.cpp"; try { using (Process exeProcess = Process.Start(startInfo)) { exeProcess.WaitForExit(); } } catch { // error handling }
Дело в том, что CL является исполняемым файлом командной строки, а не приложением с графическим интерфейсом Windows.
http://msdn.microsoft.com/en-us/library/f2ccy3wt.aspx
http://msdn.microsoft.com/en-us/library/kezkeayy.aspx
http://msdn.microsoft.com/en-us/library/9s7c9wdw.aspx
Если cl.exe отсутствует в системе PATH (по умолчанию это не так), то процесс запуска не найдет исполняемый файл и не сможет запуститься.
Так что я подозреваю, что вы видите тот факт, что cl.exe отсутствует в системной переменной PATH.
Аргумент задан неправильно. У вас есть:
var procStartInfo = new ProcessStartInfo(@"cl.exe", @" 'trial.cpp'");
Где в имени есть пробелы и одинарные кавычки. Попробуйте:
var procStartInfo = new ProcessStartInfo(@"cl.exe", @"trial.cpp");