C#:如何在没有UAC提示的情况下以管理员身份运行应用程序

时间:2017-06-06 23:56:09

标签: c# uac process.start elevated-privileges processstartinfo

我知道一遍又一遍地问过这个问题,但我找不到适合我的解决方案。

我的应用程序需要在程序文件文件夹中进行一些修改。它以普通用户身份开始。我发现添加app.manifest有帮助。所以这是我的代码的一部分:

ProcessStartInfo info = new ProcessStartInfo();
info.FileName = "cmd.exe";
info.Arguments = @"/c echo abc > ""%programfiles(x86)%\testfile.txt"""
info.CreateNoWindow = true;
info.UseShellExecute = false;
info.RedirectStandardOutput = true;
info.RedirectStandardError = true;
info.WorkingDirectory = @"C:\Temp";

Process proc = new Process();
proc.StartInfo = info;
proc.Start();
Console.WriteLine(proc.StandardOutput.ReadToEnd());
Console.WriteLine(proc.StandardError.ReadToEnd());
proc.WaitForExit();

在我的app.manifest中,这是相关的:

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

如果执行应用程序的用户是普通用户,则会弹出UAC提示,要求输入用户名和密码(因为清单)。现在,如果我使用管理员用户启动应用程序(例如使用psexec)...

psexec.exe -u Username -p Password cmd /c myapp.exe

...我认为它会像魅力一样运行,但它会弹出一个稍微不同的消息,要求我确认我希望程序运行(没有用户名和密码的字段)。如果我说是的,它运行正常。

我想要的是它以管理员权限运行,没有任何提示,并且没有在注册表上禁用UAC。这甚至可能吗?

0 个答案:

没有答案