繁体   English   中英

从C#应用程序中启动SFC

[英]launching SFC from within a C# app

我一直在搜索,但似乎无法完成这项工作。 我正在尝试从C#应用程序中的按钮启动SFC。 我知道这需要提升权限,并且在我尝试做的范围内是我想要的行为。

我已经尝试过: 要以管理员身份运行cmd和命令? 使用C#C#中 的参数以管理员身份运行CMD,以及如何通过管理员提升的cmd运行进程(带有参数)

我上次尝试的代码是:

private void button6_Click(object sender, EventArgs e)
    {
        ProcessStartInfo procStartInfo = new ProcessStartInfo("cmd", "/c " + "processNeedToRun")
        {
            RedirectStandardError = true,
            RedirectStandardOutput = true,
            UseShellExecute = false,
            CreateNoWindow = true,
            Verb = "runas"
        };

    }

我要么没有启动所有cmd窗口闪烁的进程,说凭证不正确,要么命令不正确。

我究竟做错了什么?

根据添加的评论,我将其更改为:

private void button6_Click(object sender, EventArgs e)
    {
        ProcessStartInfo procStartInfo = new ProcessStartInfo("cmd", "/c " + "sfc.exe /scannow")
        {
            RedirectStandardError = false,
            RedirectStandardOutput = false,
            UseShellExecute = true,
            CreateNoWindow = false,
            Verb = "runas"
        };

    }

并没有改变

编辑:

所以我设法找到一个解决方案:

我创建了一个新的控制台应用程序,编辑了清单以要求管理员,然后执行了此操作

Process.Start("CMD.exe", " /c SFC /Scannow");

确实有我想要的行为。 谢谢您的帮助!

您的控制台没有提升,问题是您可以使用Verb = "runas"并提升它,也可以使用UseShellExecute = false并重定向输出, 但不能同时使用两者

您的三个选择是:

  1. 使用UseShellExecute = true并禁用重定向
  2. 将清单文件添加到程序中,这样它就可以在启动时以管理员的身份提升自身,然后可以依次启动管理过程并对其进行监视。
  3. 通过编写包含始终以管理员身份运行的清单文件的第二个exe来实现两者的组合。 然后让您的第一个程序使用Verb = "runas"启动第二个程序,然后让您的第二个程序使用UseShellExecute = false启动SFC 然后,您的第二个程序通过某种形式的IPC转发输出( 通过命名管道的WCF可能最简单)将其转发到第一个未提升的程序以显示给用户。

尝试设置ProcesStartInfo.UserNameProcessStartInfo.Password来使用更高的凭据模拟新进程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM