ProcessStartInfo的StandardInputEncoding?

rev*_*ice 9 c# windows-services


当我通过键入CMD手动向Windows添加服务时,如下所示:

"C:\ Program Files(x86)\ Windows Resource Kits\Tools\instsrv.exe""some-pl-char-ąźńćńół""C:\ Program Files(x86)\ Windows Resource Kits\Tools\srvany.exe"

...服务名称一切都很好,但是当我尝试在c#中执行此操作时:

ProcessStartInfo startInfo = new ProcessStartInfo();
Process myprocess = new Process();

startInfo.FileName = "cmd"; 
startInfo.RedirectStandardInput = true;
startInfo.RedirectStandardOutput = true;
startInfo.UseShellExecute = false;

myprocess.StartInfo = startInfo; 
myprocess.Start();

StreamWriter sw = myprocess.StandardInput;
StreamReader sr = myprocess.StandardOutput;

Thread.Sleep(200);

string command = ...
       ^ "C:\Program Files (x86)\Windows Resource Kits\Tools\instsrv.exe" "some-pl-char-?????ó?" "C:\Program Files (x86)\Windows Resource Kits\Tools\srvany.exe"

sw.WriteLine(command);
sw.WriteLine("exit");

Thread.Sleep(200);

sw.Close();
sr.Close();
Run Code Online (Sandbox Code Playgroud)

然后创建的服务的名称是:some-pl-char-|轊˝-

为什么代码页有问题?ProcessStartInfo
有类似StandardInputEncoding的东西吗?
我在CMD中的活动代码页(使用chcp)是852.(波兰语)

ba_*_*end 9

参数属于Arguments属性,反斜杠需要被另一个转义.\- >\\

更新:

using (var process = new Process())
{
    var encoding = Encoding.GetEncoding(852);

    var psi = new ProcessStartInfo();
    psi.FileName = "cmd";
    psi.RedirectStandardInput = true;
    psi.RedirectStandardOutput = true;
    psi.UseShellExecute = false;
    psi.StandardOutputEncoding = encoding;

    process.StartInfo = psi;

    process.Start();

    using (var sr = process.StandardOutput)
    using (var sw = new StreamWriter(process.StandardInput.BaseStream, encoding))
    {
        var command = "....";
        sw.WriteLine(command);
        // etc..                   
    }
}
Run Code Online (Sandbox Code Playgroud)