动词 = "runas" 而不是 运行 提升
Verb = "runas" not run as elevated
正如在其他 post 中讨论的那样,我了解到 Verb = "runas" 的工作原理是提升的。
我需要 运行 "logman.exe" 具有提升权限的参数。使用以下代码,我没有得到任何输出,
try
{
var process = new Process()
{
StartInfo = new ProcessStartInfo
{
FileName = "logman.exe",
Arguments = "PerfCounterCustom",
Verb = "runas",
RedirectStandardOutput = true,
CreateNoWindow = true,
}
};
process.Start();
string lineData;
while ((lineData = process.StandardOutput.ReadLine()) != null)
{
if (lineData.Contains("Root Path:"))
{
Console.WriteLine(lineData.Trim());
}
}
process.WaitForExit();
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
注意 - 当我在 EXE 上方 运行 时,以管理员身份右键单击,我正在获取输出。
需要进行哪些更改才能通过 C# 中的代码进行提升并输出?
Process.Start() 可以使用 OS 或 Shell (Explorer.exe) 来生成新进程,但只有 Shell 会提示海拔。
因此您必须在 ProcessStartInfo 中指定 UseShellExecute=true,根据这个答案:
使用ShellExecute=false 将允许您捕获 Standard Output and Standard Error 消息。
正如在其他 post 中讨论的那样,我了解到 Verb = "runas" 的工作原理是提升的。
我需要 运行 "logman.exe" 具有提升权限的参数。使用以下代码,我没有得到任何输出,
try
{
var process = new Process()
{
StartInfo = new ProcessStartInfo
{
FileName = "logman.exe",
Arguments = "PerfCounterCustom",
Verb = "runas",
RedirectStandardOutput = true,
CreateNoWindow = true,
}
};
process.Start();
string lineData;
while ((lineData = process.StandardOutput.ReadLine()) != null)
{
if (lineData.Contains("Root Path:"))
{
Console.WriteLine(lineData.Trim());
}
}
process.WaitForExit();
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
注意 - 当我在 EXE 上方 运行 时,以管理员身份右键单击,我正在获取输出。
需要进行哪些更改才能通过 C# 中的代码进行提升并输出?
Process.Start() 可以使用 OS 或 Shell (Explorer.exe) 来生成新进程,但只有 Shell 会提示海拔。
因此您必须在 ProcessStartInfo 中指定 UseShellExecute=true,根据这个答案:
使用ShellExecute=false 将允许您捕获 Standard Output and Standard Error 消息。