我有一个遗留的winForms程序(在Windows 7 Embedded上运行),我们正试图在Windows 10上运行。我们有一个简单的过程,我们启动命令提示符进程cmd.exe并执行各种任务。一个任务是与写过滤器进行交互。 WES7使用ewfmgr,而windows 10使用uwfmgr命令行工具。
为了解释结果,我们读取输出并根据输出做出决定。
问题是在Windows 10上输出是不可读的。这仅适用于
示例简单代码:
private Process statusProcess = new Process();
private List<string> cmdOutput = new List<string>();
ProcessStartInfo cmdStartInfo = new ProcessStartInfo();
cmdStartInfo.FileName = @"C:\Windows\System32\cmd.exe";
cmdStartInfo.WorkingDirectory = @"C:\Dev";
cmdStartInfo.CreateNoWindow = true;
cmdStartInfo.UseShellExecute = false;
//Add Admin account details
cmdStartInfo.Domain = "Bla";
cmdStartInfo.UserName = "Admin";
cmdStartInfo.Password = securePwd;
cmdStartInfo.RedirectStandardOutput = true;
cmdStartInfo.RedirectStandardError = true;
cmdStartInfo.RedirectStandardInput = true;
statusProcess.StartInfo = cmdStartInfo;
statusProcess.ErrorDataReceived += cmd_Error;
statusProcess.OutputDataReceived += cmd_DataReceived;
statusProcess.EnableRaisingEvents = true;
statusProcess.Start();
statusProcess.BeginOutputReadLine();
statusProcess.BeginErrorReadLine();
//cmd_DataReceived Simple just add data
private void cmd_DataReceived(object sender, DataReceivedEventArgs e)
{
cmdOutput.Add(e.Data);
}
使用
发送命令statusProcess.StandardInput.WriteLine("dir");
如果我们运行像dir这样的命令,我们会得到完美的结果。
如果我们运行uwfmgr Get-Config
虽然该命令显示config,但set命令不起作用,因此它不仅是输出问题还是它?
错误流为空,我假设错误流正常,因为我可以在其他命令上获得错误。
代码页设置为437,其他命令按预期工作,请注意第一行是正确的并且有意义。
我尝试了不同的方法
我写了一个powershell脚本并且可以正确调用脚本,但我无法通过错误流中的UAC(我认为它的UAC但我得到访问被拒绝)并且也不知道如何获得输出来自powershell
看起来使用System.Management.Automation中的powershell类,可以使W10工作,但会引入WES7问题。
我很好奇为什么输出显示那样?
我刚刚写了这篇文章,我想知道安全性是不是让我感到困扰,我会调查这个角度。
如果有人指点,请提前致谢。