我想要运行cmd.exe
以管理员身份从参数C#为了防止UAC弹出窗口。 这是必要的,以便用它作为一个自动安装过程。 我传递中的命令很简单,就是安装文件(.exe)与路径/q
安静安装。
当我运行这段代码,有一个CMD弹出,但它运行,如果它没有执行任何东西。
public static string ExecuteCommandAsAdmin(string command)
{
ProcessStartInfo procStartInfo = new ProcessStartInfo()
{
RedirectStandardError = true,
RedirectStandardOutput = true,
UseShellExecute = false,
CreateNoWindow = true,
FileName = "runas.exe",
Arguments = "/user:Administrator cmd /K " + command
};
using (Process proc = new Process())
{
proc.StartInfo = procStartInfo;
proc.Start();
string output = proc.StandardOutput.ReadToEnd();
if (string.IsNullOrEmpty(output))
output = proc.StandardError.ReadToEnd();
return output;
}
}
至少有一个问题,你的命令,这条线:
Arguments = "/user:Administrator cmd /K " + command
应该:
Arguments = "/user:Administrator \"cmd /K " + command + "\""
此外,这将无法工作作为一个完全自动化的过程,因为它会问在Windows Vista和较新的是不知道管理员密码。
这些谁也找不到解决他们的问题,我发现这个解决方案对我来说:在解决方案文件,选择
添加=>新项目=>应用程序清单文件
然后打开它在C#。
在应用程序清单文件重命名“asInvoker”为“requireAdministrator”。 最后,应用程序清单文件应该是这样:
现在,建立自己的解决方案。 然后,你就可以打开所有的应用程序作为管理员权限。
UAC的弹出取决于用户设置“用户帐户控制设置”。 程序无法绕过。 只有当用户有设置“从不通知”,将你的程序做你正在尝试做的。
两种解决方案:首先,你可以将用户的AppData目录。 这将节省您需要摆在首位的管理权限。 (在一个更通用的方法 - 仔细想想,如果你真的需要那些特权)
另一种解决方案我们创建一个Windows服务,这将有那些特权。 该服务的第一次安装需要管理员权限,但在那之后,你可以委托你的作品与服务。
第二种解决方案是一个潜在的安全漏洞 - 所以你得想想该服务将能够认真做。
我一直用这个代码:
string[] commands = File.ReadAllLines(commandFile);
foreach (string command in commands)
{
Process process = new Process();
ProcessStartInfo startInfo = new ProcessStartInfo();
//startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.WorkingDirectory = @"C:\Windows\System32";
startInfo.FileName = "cmd.exe";
startInfo.Arguments = "/user:Administrator \"cmd /K " + command + "\"";
process.StartInfo = startInfo;
process.Start();
}
正如你所看到的:试图从VS“运行”这个代码,如果你编译这个程序和外部运行它作为管理它会不会给管理员,但是。 我用这个批处理文件来测试权限级别。
@echo off
goto check_Permissions
:check_Permissions
echo Administrative permissions required. Detecting permissions...
net session >nul 2>&1
if %errorLevel% == 0 (
echo Success: Administrative permissions confirmed.
) else (
echo Failure: Current permissions inadequate.
)
pause >nul