2012-12-10 38 views
5

我已经在网上研究了关于窗体确定按钮上的UAC功能,但无法获取信息。与实施UAC相关的所有信息是,他们使用管理权限重新启动应用程序。确定按钮上的用户帐户控制

我的要求是制作一个应用程序,当用户点击带有盾牌图标的确定按钮时,用户将能够通过提升用户权限在Windows注册表中保存一些信息,但我不想重新启动具有管理员权限的应用程序

+2

“我不想用管理员权限重新启动应用程序。”强硬。流程标记在流程启动时分配一次。所以你至少需要两个进程。 –

+0

@DavidHeffernan你需要两个进程,而不是重新启动相同的进程,你可以完全启动另一个进程。 – Servy

+0

@Servy是的,你可以做到这一点。我从这个问题的含义中读到引用“我不想启动另一个过程”。 –

回答

7

重新启动应用程序(或启动助手应用程序)就是你所做的。它是在启动导致UAC确认屏幕出现的应用程序时请求提升权限。显示屏蔽图标的目的是让用户知道确认屏幕正在出现。

您不必重新启动应用程序。如果您的应用程序允许多个实例,则可以使用命令行参数启动第二个副本,指出要进行的注册表更改。或者你可以有一个帮助应用程序来管理事情,并根据需要启动它。助手应用程序不需要创建或显示窗口;它可以是完全背景操作。

-1

可能是你应该添加一个应用程序清单,并要求管理员权限:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> 
     <security> 
      <requestedPrivileges> 
       <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/> 
      </requestedPrivileges> 
     </security> 
    </trustInfo> 
</assembly> 

编辑

它可能不是最好的解决方案在这里,因为整个应用程序在提升的权限运行,这可能是一个安全漏洞。

+2

问题在于,如果有条件且很少需要使用提升权限运行整个应用程序。这是一个等待发生的安全漏洞。 – Servy

+0

在他的问题中,他不清楚他是否想用高特权运行整个应用程序! Surly每个应用程序都应该使用最少的特权,但这并不总是可行的! –

+1

确定有可能,只要看看其他答案。解决方案是启动第二个后台进程,该进程执行少数需要提升特权的操作。 – Servy