Здравствуйте.
Пытаюсь передать данные из одной программы в другую через перенаправление ввода, примерно так:
| Запускающая программа |
| var serializer = new XmlSerializer(typeof(PowershellCommand));
// Говнокод, в процессе переделки
var pwd = new NetworkCredential("", command.Password).SecurePassword;
var psi = new ProcessStartInfo
{
Domain = command.Domain,
UserName = command.UserName,
Password = pwd,
FileName = powershellHostPath,
CreateNoWindow = true,
RedirectStandardInput = true,
};
try
{
var process = Process.Start(psi);
serializer.Serialize(process.StandardInput, command.Command);
process.StandardInput.Close();
return process;
}
catch (Win32Exception ex) when (ex.HResult == -2147467259 && ex.NativeErrorCode == 1326) // 0x80004005
|
| |
| Вызываемая программа |
|
private PowershellCommand GetCommand()
{
if (Console.IsInputRedirected)
{
return ReadCommand(Console.In);
} else {...}
}
private PowershellCommand ReadCommand(System.IO.TextReader textReader)
{
var serializer = new XmlSerializer(typeof(PowershellCommand));
return (PowershellCommand)serializer.Deserialize(textReader);
}
|
| |
Всё работает отлично, пока не встречается текст на русском — он превращается в кашу. Есть какой-нибудь способ корректно передавать кодировку (я пока обошёл это Base64)?
ЗЫ. Побочный вопрос: насколько я понимаю, если stdout родительского процесса перенаправлен, у дочернего он тоже будет перенаправлен — можно ли как-то заставить его игнорировать перенаправление и выводить в консоль?
ARI ARI ARI... Arrivederci!