Visual Basic程序 - 请求管理员权限

时间:2014-01-19 01:00:20

标签: vb.net admin uac

我正在尝试在Visual Basic中编写安装程序,我希望安装程序尝试获取管理员权限。如果该帐户是管理员,我希望它只是假设它们,如果该帐户没有管理员权限,我希望显示此提示。

UAC Prompt

如果用户可以提供权限,那么它将继续使用它们,如果它无法提供,那么它将采用替代的非管理员权限路由,就像Google Chrome安装程序一样。我该怎么做呢?经过一个小时的研究后,我在谷歌上找不到任何有用的东西。

2 个答案:

答案 0 :(得分:1)

用完了评论空间。 。 。 解决这类安装程序的好方法是使用一组三个程序:Loader,安装程序和主程序。 Loader是从桌面快捷方式等驱动的。它的任务是检查供应商的web api等,看看是否有新版本可用。如果没有,那么它启动主程序。但是,如果有新版本可用,则它为用户提供下载它的机会。如果用户同意,则加载程序启动安装程序。安装程序是三个中唯一标记为RequireAdmin的安装程序,因此仅在必要时才会显示UAC提示符。安装程序会根据需要下载并安装新版本,卸载或覆盖旧版本。我们做过类似的事情,效果很好。 但是,MS ClickOnce也运行良好,编码更少,并且更容易正确,我建议你也考虑这个选项。

编辑:然而,一些搜索引导我this MSFT link - 它可能会有所帮助。我自己没有尝试过这种技术。

答案 1 :(得分:1)

在Visual Studio中,将新文件添加到项目中,选择“application manifest”作为文件类型,然后单击“确定”。

您将获得XML文档。文档的第一大块就是这样的:

 <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
        <!-- UAC Manifest Options
            If you want to change the Windows User Account Control level replace the 
            requestedExecutionLevel node with one of the following.

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

            Specifying requestedExecutionLevel node will disable file and registry virtualization.
            If you want to utilize File and Registry Virtualization for backward 
            compatibility then delete the requestedExecutionLevel node.
        -->
        <requestedExecutionLevel level="asInvoker" uiAccess="false" />

取消评论说:

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

这将使该应用程序(或DLL)运行UAC以获得管理员权限。

如果您只希望特定组件运行提升,则将该代码放在单独的DLL文件中。当您的主程序首次调用该程序集时,将显示UAC,并且将授予提升。