2

上記の関数を呼び出すと、読み取っている出力の80列ごとに16進数の0D0Aが返される理由を理解しようとしています。

簡潔にするために、2行のテスト用の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が返されますが、次を使用してキャプチャした標準の80文字ごとにこの不思議な(私にとって)0D0A改行があります。

var Stdout = new List<string>;

...

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

これは、文字列varに標準出力を格納すると、XMLの取り組みに大きな打撃を与えます。余分な改行ではなく、ps1スクリプトでstdoutに書き込んだものを正確に取得することを期待していました。

私は何が欠けていますか?この問題を抱えている他の人を探しましたが、答えが見つかりませんでした。うまくいけば、私が検索に挑戦しているのではありません。

4

2 に答える 2

1

このP/Invokeメソッドに従いdwXCountChars、非常に大きな値に設定します。STARTF_USECOUNTCHARSフラグにも含めることを忘れないでください。

于 2012-07-03T07:55:14.820 に答える
1

今のところ(何かを出荷する必要があるため)最終的なテスト済みの解決策は、PowerShellからの出力をWrite-OutputではなくWrite-Hostコマンドレットから取得することです。stdoutを取得するプロセスは、私の元の投稿と同じままでした。これが他の人に役立つことを願っています。すべての入力に感謝します。

于 2012-07-03T18:23:57.567 に答える