我正在尝试在Visual Basic中编写安装程序,我希望安装程序尝试获取管理员权限。如果该帐户是管理员,我希望它只是假设它们,如果该帐户没有管理员权限,我希望显示此提示。
如果用户可以提供权限,那么它将继续使用它们,如果它无法提供,那么它将采用替代的非管理员权限路由,就像Google Chrome安装程序一样。我该怎么做呢?经过一个小时的研究后,我在谷歌上找不到任何有用的东西。
答案 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,并且将授予提升。