[英]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
并重定向输出, 但不能同时使用两者 。
您的三个选择是:
UseShellExecute = true
并禁用重定向 Verb = "runas"
启动第二个程序,然后让您的第二个程序使用UseShellExecute = false
启动SFC
。 然后,您的第二个程序通过某种形式的IPC转发输出( 通过命名管道的WCF可能最简单)将其转发到第一个未提升的程序以显示给用户。 尝试设置ProcesStartInfo.UserName
和ProcessStartInfo.Password
来使用更高的凭据模拟新进程。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.