启动流程时不要提示UAC - C#

时间:2013-12-02 09:51:17

标签: c# winapi process uac

在我有一个应用程序,我想开始安装另一个程序,用户必须是管理员。为此,我执行以下操作:

var info = new ProcessStartInfo();

info.FileName = fileName;
info.Verb = "runas";
info.UseShellExecute = false;

Process.Start(info);

这样可以正常工作,但用户必须是管理员,并且UAC的提示不会显示。 我已经读过Verb应该是“runas”而UseShellExecute应该是false。但它根本行不通。有什么想法吗? :)

1 个答案:

答案 0 :(得分:4)

只有在runasUseShellExecute时才能使用true动词。这是因为Verb仅在调用ShellExecuteEx API时才有意义。

在您的代码中,使用的基础API是CreateProcess,并且没有收到动词,因此您的runas规范将被忽略。


这就是你提出的问题的答案,但我怀疑你选择的解决方案不是最好的。如果安装程序总是需要运行提升,那么您应该将其标记为。制作安装程序时,请使用清单文件中的requireAdministrator选项。这样,只要运行安装程序,就会调用UAC提升过程。这使得需要的知识提升到安装程序而不是调用程序,而这正是适合它的调用程序。