我想允许用户在我的非管理员程序中以管理员身份运行命令行实用程序,并让我的程序获取输出。该实用程序是第三方的,但与我的程序一起分发。
我可以重定向程序的输出,也可以以管理员身份运行程序,但不能同时执行这两项操作。
目前我唯一可以开始工作的是使用 cmd.exe 将输出重定向到文件,例如:
using System.Windows.Forms;
using System.Diagnostics;
using System.IO;
using System.Reflection;
string appDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
string utilityPath = Path.Combine(appDirectory, "tools", "utility.exe");
string tempFile = Path.GetTempFileName();
Process p = new Process();
// hide the command window
p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
p.StartInfo.FileName = "cmd.exe";
// run the tool, redirect the output to the temp file and then close.
p.StartInfo.Arguments = " /C \"\"" + utilityPath + "\" > \"" + tempFile + "\"\"";
p.StartInfo.Verb = "runas"; // run as administrator
p.Start();
p.WaitForExit();
// get the output, delete the file and show the output to the user
string output = File.ReadAllText(tempFile);
File.Delete(tempFile);
MessageBox.Show(output);
这有两个问题:1)它使用临时文件和 2)UAC 用于 cmd.exe 而不是实用程序.exe。肯定有更好的方法来做到这一点?