使用 ProcessStartInfo 重定向标准输出并提示 UAC

Dar*_*ale 5 c# wpf

我正在开发面向 .NET 3.0 的 WPF 应用程序。我需要调用一个需要管理权限的 exe。我可以通过使用以下内容让 UAC 提示许可:

ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.Verb = "runas";
startInfo.UseShellExecute = true;
startInfo.FileName = "target.exe";

Process p = new Process();
p.StartInfo = startInfo;
p.Start();
Run Code Online (Sandbox Code Playgroud)

我的问题是我需要重定向标准输出,这样做会UseShellExecute = true导致异常,说明:

Process 对象必须将 UseShellExecute 属性设置为 false 才能重定向 IO 流

但是,将其设置为 false 会导致 UAC 不提示许可,并且出现异常说明:

请求的操作需要提升

如何重定向标准输出并提示 UAC?

我见过这个类似的问题,但是解决方案是使用 app.manifest 来授予我的应用程序管理权限。由于要求,这是我不能做的事情。

Mas*_*ari 4

UseShellExecute必须设置为false重定向 IO,并true使用该Verb属性。所以你不能。

这篇文章似乎很神奇,尽管我还没有测试过。

它是用 C++ 编写的,但可以轻松创建包装 API,以便使用DllImport.


注意:如果您想在两个程序之间传递数据并有权访问目标程序的源代码,您可以轻松地重新设计您的应用程序以使用而Named Pipes不是重定向标准 I/O。