程序如何请求管理员权限?

3

我正在使用VB.NET开发一个小应用程序,该程序需要管理员权限来完成某些任务。在执行程序期间,有没有一种方法可以请求管理员权限?

更改应用程序运行的用户账户的一般方法是什么?


2
看起来您已经发布了相同的问题两次:https://dev59.com/90XRa4cB1Zd3GeqPpjHk - Serhat Ozgel
4个回答

7

3
根据您的需求,有多种方法可供选择。在UAC应用程序开发人员要求中提供了一些详细信息。
  1. 包含一个UAC清单,在启动时要求您的程序需要管理员权限。
  2. 使用建议的方法之一来调用升级以在进程外运行。其中一个最好的方法是使用COM升级单元CoCreateInstanceAsAdmin调用作为管理员运行的COM对象上的方法。这可能比较棘手,但在C++中可以正常工作。
  3. 另一种可行的方法是将需要管理员权限的代码部分隔离到一个应用程序中,该应用程序使用UAC清单要求管理员权限。在这种情况下,您的主要应用程序不需要以管理员身份运行。当您需要管理员权限时,您会调用外部应用程序。

我使用了方法三,但它只适用于Win7,不能在Vista上运行,反而给出“System.ComponentModel.Win32Exception (0x80004005) the requested operation requires elevation”。 - Peter Lee
我非常确定Windows也不允许您在管理员/非管理员安全边界之间重定向标准输入/输出/错误。您必须找到另一种方法来获取以管理员身份运行的程序的输出 - 参考:https://dev59.com/917Va4cB1Zd3GeqPNMxh#8690661 - Kiquenet
@Kiquenet 是的,你可能是对的。在这种情况下,如果需要这种通信方式,通常会使用 COM 进行通信,但还有许多其他方法也可以用来实现。 - 1800 INFORMATION

1
 Try
                    Dim procInfo As New ProcessStartInfo()
                    procInfo.UseShellExecute = True
                    procInfo.FileName = 'Filename here
                    procInfo.WorkingDirectory = ""
                    procInfo.Verb = "runas"
                    Process.Start(procInfo)
                Catch ex As Exception
                    MsgBox(ex.Message.ToString(), vbCritical)
                End Try
            End If

0
最简单的方法是点击项目选项卡 -> 添加 Windows 窗体 -> .XML 文件 -> 命名为 (程序名称).manifest -> 将此代码粘贴到其中 link(感谢 JDOConal) -> 然后右键单击解决方案资源管理器框中的项目名称,选择属性 -> 在第一个选项卡上选择清单,然后选择您创建的 .manifest 文件 -> 构建 = 完成!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接