C# 重定向输入/输出时Cmd未提升
我正在尝试通过CMD命令运行自动安装。程序输出进度,我需要捕获该输出并在一个漂亮的窗口中计算总进度。在我看来,不可能同时提升和重定向。我试过 运行cmd并向其提供命令C# 重定向输入/输出时Cmd未提升,c#,wpf,cmd,C#,Wpf,Cmd,我正在尝试通过CMD命令运行自动安装。程序输出进度,我需要捕获该输出并在一个漂亮的窗口中计算总进度。在我看来,不可能同时提升和重定向。我试过 运行cmd并向其提供命令 var proc = new Process { StartInfo = new ProcessStartInfo { FileName = "cmd.exe", Verb = "runa
var proc = new Process
{
StartInfo = new ProcessStartInfo
{
FileName = "cmd.exe",
Verb = "runas",
UseShellExecute = false,
RedirectStandardOutput = true,
RedirectStandardInput = true,
RedirectStandardError = true,
CreateNoWindow = true
}
};
proc.Start();
proc.StandardInput.WriteLine("command");
以命令作为参数运行cmd
var proc = new Process
{
StartInfo = new ProcessStartInfo
{
FileName = "cmd.exe",
Arguments = "/C " + "command",
Verb = "runas",
UseShellExecute = false,
RedirectStandardOutput = true,
RedirectStandardInput = true,
RedirectStandardError = true,
CreateNoWindow = true
}
};
proc.Start();
毫无效果。有什么诀窍吗?捕获输入/输出后提升?我需要这个来工作。psexec是否可以实现这一点 如果您拥有安装程序,您可以重写它们,使它们不使用标准流作为通信手段,例如。如果不这样做,您可以编写一个运行提升的包装程序(您使用
UseShellExecute
运行它),不使用标准流,但运行安装程序并重定向其输入(您运行它们时不使用UseShellExecute
),通过命名管道或其他方式向不相关的主程序报告进度。我希望这张图表能更清楚地说明:
non-elevated.exe
\
\ named pipes
\
elevated-wrapper.exe (ran with UseShellExecute=true)
\
\ redirected standard streams
\
installer-program.exe (ran with UseShellExecute=false and redirected streams)
您正在尝试通过批处理程序运行自动安装,该批处理程序显示输出、捕获输出并实时显示。。。很抱歉,为什么不重写命令以通过WPF运行呢?无论如何,