我一直在寻找,似乎无法完成这项工作。我试图从C#应用程序中的按钮启动SFC。我知道它需要提升权利,我想要做的就是我想要的行为。
我试过了: To run cmd as administrator along with command? Running CMD as administrator with an argument from C# 和 C# how to run a process(with arguments) through an administrator elevated 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");
这确实有我想要的行为。谢谢你的帮助!
答案 0 :(得分:2)
您的控制台没有提升,问题是您可以使用Verb = "runas"
并提升它,也可以使用UseShellExecute = false
并重定向输出, 您不能拥有两个 即可。
您的三个选择是:
UseShellExecute = true
并停用重定向Verb = "runas"
启动第二个程序,然后让您的第二个程序以SFC
开始UseShellExecute = false
。然后,您的第二个程序通过某种形式的IPC(WCF over named pipes可能是最简单的)将输出转发给第一个未显示给用户的非高速程序。答案 1 :(得分:0)
尝试设置
ProcesStartInfo.UserName
和ProcessStartInfo.Password
使用提升的凭据模拟新流程。