【问题标题】:Verb = "runas" not run as elevated动词 = “runas” 不作为提升运行
【发布时间】:2018-11-01 08:10:37
【问题描述】:

正如在其他帖子中所讨论的,我开始知道 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# 中的代码进行提升并输出?

【问题讨论】:

  • 您是否尝试过设置WorkingDirectory 属性?
  • 这不是必需的,因为当我运行时 exe 会给出正确的输出...以管理员身份右键单击
  • 但是当你以这种方式运行它时,你在工作目录或快捷方式指定了工作目录。

标签: c# process elevated-privileges


【解决方案1】:

Process.Start() 可以使用 OS 或 Shell (Explorer.exe) 来生成新进程,但只有 Shell 会提示提升。

因此您必须在 ProcessStartInfo 中指定 UseShellExecute=true,根据这个答案:processstartinfo-verb-runas-not-working

UseShellExecute=false 将允许您捕获Standard Output and Standard Error 消息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-16
    • 1970-01-01
    • 2018-10-21
    • 2015-07-20
    • 2021-02-15
    • 2014-03-23
    • 2016-03-22
    相关资源
    最近更新 更多