在我有一个应用程序,我想开始安装另一个程序,用户必须是管理员。为此,我执行以下操作:
var info = new ProcessStartInfo();
info.FileName = fileName;
info.Verb = "runas";
info.UseShellExecute = false;
Process.Start(info);
这样可以正常工作,但用户必须是管理员,并且UAC的提示不会显示。 我已经读过Verb应该是“runas”而UseShellExecute应该是false。但它根本行不通。有什么想法吗? :)
答案 0 :(得分:4)
只有在runas
为UseShellExecute
时才能使用true
动词。这是因为Verb
仅在调用ShellExecuteEx
API时才有意义。
在您的代码中,使用的基础API是CreateProcess
,并且没有收到动词,因此您的runas
规范将被忽略。
这就是你提出的问题的答案,但我怀疑你选择的解决方案不是最好的。如果安装程序总是需要运行提升,那么您应该将其标记为。制作安装程序时,请使用清单文件中的requireAdministrator
选项。这样,只要运行安装程序,就会调用UAC提升过程。这使得需要的知识提升到安装程序而不是调用程序,而这正是适合它的调用程序。