更改了System.Diagnostics.ProcessStartInfo()使用的路径,我现在收到解析错误

时间:2017-11-10 13:14:10

标签: c# .net windows parsing f#

我们在我们的产品上每晚运行自动化测试,最近从VS2015更改为VS2017,以构建我们的自动化测试和我们正在测试的软件。由于所有工具(VsDevCmd.bat,mstest.exe等)都位于VS2017中的不同路径中,因此我需要在测试运行器的配置文件中更改这些路径。因此,例如,对于VsDevCmd.bat,我们来自:

C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\Tools\VsDevCmd.bat

C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\Tools\VsDevCmd.bat

现在我们用来运行测试类别的函数如下所示:

let private runTestsWithoutPublishing (testCategory,testContainers:String[],resultFilePath,testSettingPath) = ccr {    
let stc =
    testContainers
    |>Array.map (fun tc -> sprintf "/testcontainer:\"%s\"" tc)
let tcontainers = String.Join(" ", stc)

let t1 =  
    sprintf "mstest.exe %s /category:\"%s\" /resultsfile:\"%s\" /testsettings:\"%s\""  
        tcontainers testCategory resultFilePath testSettingPath

let psi = new System.Diagnostics.ProcessStartInfo("cmd.exe","/k \""+VSDCPath+"\"") 
psi.UseShellExecute <- false
psi.RedirectStandardOutput <- true
psi.RedirectStandardError <- true
psi.RedirectStandardInput <- true
psi.CreateNoWindow <- false        
let p = System.Diagnostics.Process.Start(psi) 
let output = new System.Text.StringBuilder()
let error = new System.Text.StringBuilder()
p.OutputDataReceived.Add(fun args -> 
    output.Append(args.Data)|> ignore
    output.Append("\r\n")|> ignore)
p.ErrorDataReceived.Add(fun args -> error.Append(args.Data) |> ignore)
p.BeginErrorReadLine()
p.BeginOutputReadLine()
p.StandardInput.WriteLine t1
p.StandardInput.WriteLine "Exit"
p.WaitForExit()
return { exitCode = p.ExitCode; stdout = output.ToString(); stderr = error.ToString() }

}

VSDCPath是上述两条路径之一。

自从上面提到的路径更改后我看到的问题是,我现在在运行此代码时看到以下错误:

'C:\Program' is not recognized as an internal or external command,operable program or batch file.'mstest.exe' is not recognized as an internal or external command,operable program or batch file.

因此,自从我更改路径后,解析似乎已经破解,我不明白为什么VSDCPath被双引号\"包围。此外,两个路径中都有空格,但只有第一个路径使用上述代码。

我错过了什么吗?

0 个答案:

没有答案