2014-01-19 51 views
0

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

UAC Prompt

如果用户能给予的权限,那么它将继续与他们,如果不能给他们,然后它会采取一种替代,没有管理员权限的路线,就像谷歌Chrome安装程序。我该怎么做呢?经过一小时的研究,我没有在Google上找到任何有用的信息。

+1

“如果账户是管理员,我希望它只是假设他们”我不认为这是可能的。系统将始终显示UAC提示;不同之处在于标准用户包括对凭证的请求,就像你的屏幕截图一样,而管理员则没有。另外,没有选择说'允许程序运行,但没有提升',所以很难看到你的第二个需求是如何得到满足的。 我不愿意使用'不可能'这个词,但是MSFT对UAC的坚固性有很大的帮助 – peterG

+0

@peterG我不在乎是否显示UAC提示。我误解了我的问题,因为我在计算机上关闭了UAC,因此当程序需要管理员权限时,只需要他们。 – DavidB

回答

1

所以用尽评论空间。 。 。 处理这种安装程序的一个好方法是使用一组三个程序:Loader,安装程序和主程序。加载程序是从桌面快捷方式驱动的等。它的任务是检查供应商的网络API等,看看是否有新版本可用。如果不是,那么它启动主程序。然而,如果有新版本可用,那么它为用户提供了下载它的机会。如果用户同意,则加载器启动安装程序。安装程序是三个标记为RequireAdmin中唯一的一个,因此只有在必要时才会显示UAC提示。安装程序下载并安装新版本,根据需要卸载或覆盖旧版本。我们做了这样的事情,它运作良好。 但是,MS ClickOnce也可以很好地工作,编码少得多,而且四处都比较容易找到,我建议你也考虑这个选项。

编辑:但是,一点搜索导致我this MSFT link - 它可能会有所帮助。我自己并没有尝试过这种技术。

1

在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将出现,并且将会授予标高。

+1

好的结果 - 我假设OP已经知道如何将exe标记为requireAdmin,但可能并非如此。 此外,要获得清单,只需在项目资源管理器的“应用程序”选项卡上单击“查看Windows设置”按钮即可。 – peterG

+0

@peterG我不知道如何改变'requireAdmin'的东西,而且如果用户忽略UAC提示,我还不知道如何将一个单独的DLL文件设置为默认值。 – DavidB

+0

@DavidB好吧,那么也许我太过于草率地假设你的问题是关于什么的。也许你可以编辑它来包含更多关于'Installer Program'的意思,以及你希望它做什么,这是无法使用VS部署项目(VS2012/3中的ISLE)或ClickOnce等来完成的。同时,设置RequestedExecutionLevel在清单中按照Nathan M的回答是,您是如何控制exe在运行时是否生成UAC提示的; ClickOnce和Google Chrome安装程序通过安装到用户的配置文件而不是安装程序文件来避免对管理员的需求。 – peterG