Process.StandardOutput.ReadToEnd()和无关的换行符

时间:2012-07-02 14:42:27

标签: c# windows .net-4.0 process

我试图理解为什么,当我调用上面的函数时,我正在读取输出的每第80列的十六进制0D0A。

我有一个PowerShell脚本,为了简洁起见,测试中有两行:

$xmlSpew = "<IISAppPoolConfig><DefaultWebSite><ApplicationPoolName>DefaultAppPool</ApplicationPoolName></DefaultWebSite><AuthN>Basic</AuthN></IISAppPoolConfig>"
Write-Output $xmlSpew

我使用ProcessStartInfo的Process对象调用脚本,如下所示:

var psi = new ProcessStartInfo
{
    WorkingDirectory = Path.GetDirectoryName(FileToRun),
    FileName = FileToRun,
    Arguments = Arguments,
    UseShellExecute = false,
    CreateNoWindow = true,
    RedirectStandardError = true,
    RedirectStandardOutput = true,
};

var process = new Process
{
    StartInfo = psi,
    EnableRaisingEvents = true,
};

FileToRun值为:

C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe

参数值为:

-File "C:\Program Files\MyTest\MyProgInputs\read.d\IISAppPoolConfig.ps1"

脚本运行正常,我回到退出代码0,但我有一个神秘的(对我来说)0D0A换行符,每80个字符串标准输出我使用:

var Stdout = new List<string>;

...

Stdout.Add(process.StandardOutput.ReadToEnd());

一旦我将标准输出存储在字符串var中,这对我的XML工作造成了严重破坏。我期望得到我在ps1脚本中写入stdout的内容,而不是额外的换行符。

我错过了什么?我已经找到了这个问题的其他人,但我还没有找到答案。希望不是我受到搜索挑战。

2 个答案:

答案 0 :(得分:1)

按照this P / Invoke方法,将dwXCountChars设置为一个非常大的值。不要忘记在标志中加入STARTF_USECOUNTCHARS

答案 1 :(得分:1)

现在的最终和经过测试的解决方案(因为我需要提供一些东西),是PowerShell的输出来自Write-Host cmdlet而不是Write-Output。获得标准输出的过程与我原来的帖子一样。希望这有助于其他人。感谢所有的投入。