2012-02-27 3 views
-1

я следующий кодКак запустить CL.exe с помощью Process.Start()?

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(); 

Как передать имя файла в качестве параметра? Выше кода не запускается, и я пробовал весь полный путь, разные параметры пути.

Может ли кто-нибудь помочь?

+0

не работает? Какая ошибка? – vulkanino

+1

Определить «не работает». Объясните _exactly_, что ** ** происходит и что вы ожидаете. – Oded

+0

Что означает «не работает»? Процесс не начался? Неверные параметры командной строки? – ken2k

ответ

0

Аргумент задан неверно. У вас есть:

var procStartInfo = new ProcessStartInfo(@"cl.exe", @" 'trial.cpp'"); 

Если в названии есть пробелы и одинарные кавычки. Попробуйте:

var procStartInfo = new ProcessStartInfo(@"cl.exe", @"trial.cpp"); 
+1

Уже сделано в конструкторе 'ProcessStartInfo'. – ken2k

+0

@ ken2k - пропустил это - не прокручивал код по горизонтали. – ChrisF

+0

такой же результат. это не будет иметь большого значения, поскольку я также могу предоставить путь к файлам с кавычками, а дополнительное пространство будет просто пространством объявления в аргументах, которое не должно быть проблемой для синтаксического анализа. – user1235483

0

EDIT:

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 является командной строки исполняемого файла, а не окна GUI приложение.

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

+0

-1 только для публикации ссылок и резюме или решения вообще. – Oded

+0

@Однако извиняюсь, но он мог бы найти Google и легко найти ответ. – vulkanino

+0

Да. И вы могли бы прокомментировать как таковую. – Oded

0

Если cl.exe не в системе PATH (который по умолчанию это не так), то процесс запуска не найти и он не сможет работать.

Поэтому я подозреваю, что вы видите факт, что cl.exe нет в системе PATH.

Смежные вопросы