Как запустить CL.exe с помощью Process.Start ()? - PullRequest
0 голосов
/ 27 февраля 2012

У меня следующий код

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

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

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

Ответы [ 3 ]

0 голосов
/ 27 февраля 2012

РЕДАКТИРОВАТЬ :

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

0 голосов
/ 27 февраля 2012

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

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

0 голосов
/ 27 февраля 2012

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

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

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

var procStartInfo = new ProcessStartInfo(@"cl.exe", @"trial.cpp");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...