2017-12-25 23 views
0

プロセス内でプロセスをエミュレートしようとしています(作成しているsshクローン用)。それは動作しますが、cmd.exe自体(see picture)とはあまりよく比較されません。画像でわかるように、エミュレートされたプロセスはコマンド(矢印で示されている)をエコーし​​、ときどき何かを印刷することを拒否します(円で囲まれた適切な応答)。SSHクローンを作成するには?

var startInfo = new ProcessStartInfo("cmd") { 
CreateNoWindow = true, 
UseShellExecute = false, 
RedirectStandardError = true, 
RedirectStandardInput = true, 
RedirectStandardOutput = true 
}; 
var shell = new Process() { 
    StartInfo = startInfo 
}; 

new Thread(() => { 
    char[] buffer = new char[512]; 
    int read; 
    while(true) { 
     if((read = shell.StandardOutput.Read(buffer, 0, 512)) > 0) { 
      Console.Out.Write(buffer, 0, read); 
    } 
}).Start(); 
while(true) { 
    shell.StandardInput.WriteLine(Console.ReadLine()); 
} 
shell.WaitForExit(); 

私は間違っていますか?

編集:私は、コードページを調整しようとしている

+0

コンソールコードページを変更したり、コンソールに期待しているエンコーディングで書き込んだりしてください。コードページを見るには 'chcp'と打ちます。 utf-8に 'chcp 65001'を試してください。 – ACatInLove

+0

@ACatInLoveあなたの提案を反映するために質問を編集しました。 – cschultz2048

+0

あなたはUTF8を書いていますか? WindowsはUTF 16を内部的に使用します。 Windowsが別のウィンドウに情報を送信すると、そのウィンドウは作成された方法で処理され、IEのデータはUnicodeから開始されたにもかかわらずANSIウィンドウが取得されます。 – ACatInLove

答えて

1

問題解決(hereを参照):

  • 省略エラーメッセージは、私は読んでいませんでした標準エラーストリームに書き込まれました。
  • "echoed"コマンドは単純に入力を表示するシェルです。たとえば、 "type /?"と書くと、シェルは "... \ Debug> type /?"と表示し、標準出力から読み込んでエコーバックします。
関連する問題