如何使用Process.Start()运行CL.exe?

时间:2012-02-27 13:47:33

标签: c# process.start cl.exe

我有以下代码

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 :(得分:0)

参数设置不正确。你有:

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

名称中有空格和单引号的位置。尝试:

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

答案 1 :(得分:0)

修改

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 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

答案 2 :(得分:0)

如果 cl.exe 不在系统 PATH (默认情况下不是),则启动过程将找不到可执行文件,它将无法运行

所以我怀疑你看到 cl.exe 不在系统路径中的事实。