【发布时间】:2015-06-04 22:04:04
【问题描述】:
我有一个小命令允许我从 CMD 查询信息,但是它需要管理员权限(不是在我的应用程序级别,而是在 CMD 级别)我走这条路的唯一原因是因为我无法获得 WMI查询我一生的 bitlocker 设置,这个项目需要离开我的办公桌。
if (bitA.Text == "Bitlocker Available")
{
Process cmd2 = new Process();
cmd2.StartInfo.Verb = "runas";
cmd2.StartInfo.FileName = "cmd.exe";
cmd2.StartInfo.Arguments = "/c ping 8.8.8.8";
cmd2.StartInfo.UseShellExecute = false;
cmd2.StartInfo.RedirectStandardOutput = true;
cmd2.StartInfo.RedirectStandardError = true;
cmd2.Start();
//* Read the output (or the error)
string output2 = cmd2.StandardOutput.ReadToEnd();
bitB.Text = output2;
cmd2.WaitForExit();
}
【问题讨论】:
-
您是否尝试过以管理员身份运行该应用程序?这可能使 CMD 能够以管理员身份运行(在运行帐户的权限下)。
-
问题是 UseShellExecute 必须为真才能提升。但是 UseShellExecute 必须为 false 才能重定向。因此,您不能同时提升和重定向进程输出。您需要另一种 IPC 机制。对于某些任意命令,您可能必须将输出重定向到一个文件,然后在您的调用进程中读取它。
-
您有没有问过有关如何在 Stack Overflow 上进行 WMI bitlocker 查找的问题,显示您尝试了什么以及遇到了什么错误?
-
为什么大家总是使用
FileName = "cmd.exe"然后Arguments = "/c Whatever.exe whateverArg"作为参数,为什么不直接使用FileName = "Whatever.exe"和Arguments = "whateverArg"?