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

Vb.net Visual Basic程序-请求管理员权限,vb.net,admin,uac,Vb.net,Admin,Uac,我正在尝试用Visual Basic编写一个安装程序,我希望安装程序尝试获得管理员权限。如果该帐户是管理员,我希望它只是假设他们,如果该帐户没有管理员权限,我希望显示这样的提示 如果用户可以授予权限,那么它将继续使用这些权限,如果用户不能授予这些权限,那么它将采用另一种无管理权限的方式,就像Google Chrome安装程序一样。我该怎么做?经过一个小时的研究,我在谷歌上没有发现任何有用的东西。评论空间不足,所以。 处理此类安装程序的一个好方法是使用一组三个程序:加载程序、安装程序和主程序。加

我正在尝试用Visual Basic编写一个安装程序,我希望安装程序尝试获得管理员权限。如果该帐户是管理员,我希望它只是假设他们,如果该帐户没有管理员权限,我希望显示这样的提示


如果用户可以授予权限,那么它将继续使用这些权限,如果用户不能授予这些权限,那么它将采用另一种无管理权限的方式,就像Google Chrome安装程序一样。我该怎么做?经过一个小时的研究,我在谷歌上没有发现任何有用的东西。

评论空间不足,所以。 处理此类安装程序的一个好方法是使用一组三个程序:加载程序、安装程序和主程序。加载程序是从桌面快捷方式等驱动的加载程序。其任务是检查供应商的web api等,以查看是否有新版本可用。如果没有,则启动主程序。但是,如果有一个新版本可用,那么它将为用户提供下载它的机会。如果用户同意,则加载程序将启动安装程序。安装程序是三个标记为RequireAdmin的程序中唯一的一个,因此UAC提示符仅在必要时出现。安装程序下载并安装新版本,根据需要卸载或覆盖旧版本。我们已经做了类似的事情,效果很好。 然而,ClickOnce女士也工作得很好,编码少了很多,而且更容易得到正确的答案,我也建议你也考虑这个选项。
编辑:然而,一点搜索让我找到了——这可能会有帮助。我自己还没有尝试过这种技术。

在Visual Studio中,将新文件添加到项目中,选择“应用程序清单”作为文件类型,然后单击“确定”

您将得到一个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将出现,并且将授予提升。

“如果该帐户是管理员,我希望它仅假设他们”我认为这是不可能的。系统将始终显示UAC提示;不同之处在于,标准的user one包含凭证请求,就像在屏幕截图中一样,而admin one不包含凭证请求。此外,没有一个选项可以说“允许程序运行,但不允许提升”,因此很难看到如何满足您的第二个要求。我不太愿意使用“不可能”这个词,但微软金融公司在很大程度上依赖于它的坚不可摧UAC@peterG我不在乎是否显示UAC提示。我的问题用错了词,因为我已经在我的计算机上关闭了UAC,所以当一个程序需要管理员权限时,它只需要这些权限。很好的捕获-我假设OP已经知道如何将exe标记为RequiredMin,这可能不是事实。另外,要访问清单,您只需单击“项目资源管理器”的“应用程序”选项卡上的“查看窗口设置”按钮。@peterG我不知道如何更改
requireAdmin
的内容,而且,如果用户忽略UAC提示,我也不知道如何将单独的DLL文件设为默认值。@DavidB好的,那么也许我太仓促地假设了你的问题是关于什么的。也许您可以对其进行编辑,以包含更多关于您所说的“安装程序”的确切含义,以及您希望它执行的操作,这些操作无法使用VS部署项目(VS2012/3中的ISLE)或ClickOnce等来完成。同时,根据Nathan M的回答在清单中设置RequestedExecutionLevel是如何控制exe在运行时是否生成UAC提示;ClickOnce和Google Chrome安装程序通过安装到用户的配置文件而不是程序文件来避免安装时对管理员的要求。@Nathan就是这样:我不知道怎么做。至于upvote,我直到现在才忘记给你。创建两个具有两个不同权限范围的不同DLL。。。在项目中引用它们。如果第一个失败,要么在try块中测试异常,要么做一些非常规的事情,比如在必要时用注册表开关告诉自己程序的状态。无论如何,使用另一个部件作为后备。。。只需在项目中引用两个DLL即可。