我们可以让UAC提示只显示一次吗?

haw*_*bsl 5 .net uac windows-7

有没有办法让应用程序在首次运行时只向用户显示一次UAC提示.此后,没有进一步的提示.

换句话说,我知道我们的应用程序需要用户的UAC权限才能执行某些操作.那没关系.但是我们不希望它在每次运行时都要继续询问.用户是否可以一直授予我们的应用程序权限?或者我所问的是否违反了UAC的基本原则?

我们正在使用.NET和Windows 7

Ian*_*oyd 13

你的问题的答案是:不,你不能这样做.


微软特别禁止这种行为.如果应用程序可以将自己添加到排除列表中,那么我们就会回到之前的混乱中.

您需要做的是使您的程序不需要管理访问权限.

问问自己:你在Windows XP上做了什么?

  • 我不允许运行你的软件吗?
  • 当我是标准用户时你的软件会崩溃吗?
  • 您的软件没有提供任何价值,并且在标准用户运行时绝对没有功能吗?

Windows XP没有UAC的说服力.用户以管理员身份运行程序的唯一方法是使用其他用户登录.这比单击"继续"更糟糕的用户体验.

如果您不想编写标准用户友好的软件,那么您就是问题的一部分.UAC不是问题,UAC很有意思.我可以关闭UAC,作为标准用户全职运行,您的软件仍然无法运行.


微软考虑过

  • 白名单
  • 记住我的偏好
  • 不要再问我了.

如果你有一个白名单,那么每个程序只会在安装时将自己添加到这样的列表中.

如果存在此类白名单,那么您的应用将成为恶意软件的目标.它会喜欢修改二进制文件来执行它想要的东西; 因为它知道该程序将被默默地提升.

恶意软件会喜欢用你的应用程序使用SendMessage,尝试传递无效的数据或结构,试图让你的管理应用程序执行它想要的代码.

如果用户可以选择禁用将来的程序提示,那么他们就会这样做,并且每个程序都将作为管理员运行,我们将回到原来的状态.

所有这些想法都没有解决问题:几乎没有程序实际上需要管理访问权限.

现在是时候迫使开发人员接受这个事实了.


白名单无法正常工作

有些人想要想办法让白名单工作.

  • 有一个复选框,用户可以说,"不要再提示我输入此文件"
    如果存储该文件名,则其他具有相同名称的程序将以管理员身份静默运行.

  • 好的,然后我们将记录完整路径,或使用文件的哈希值作为白名单条目. 如果有白名单,那么其他程序会在安装时将自己添加到该列表中,并使程序运行具有用户不想要的管理访问权限.

  • 如果只允许签名的申请,我们知道这些申请是安全的.应用程序不安全,因为它们已签名.应用程序不必是恶意软件,因为它被滥用于做坏事.(例如flash中的缓冲区溢出,firefox,即chrome,safari,opera,word,photoshop,Yahoo image uploader工具).

您必须将有效代码签名者列表存储在列表中.无论你如何分割它,拥有任何白名单意味着应用程序只会将自己添加到该列表中.

  • 那么,不要让他们访问列表.甚至管理员也不允许将项目添加到列表中. 如果管理员甚至不能将项目添加到列表中,那么用户如何首先将项目添加到列表中?如果您不允许将项目添加到白名单,则无法将项目添加到白名单!

你如何管理白名单?让我们说用户已经改变了主意,或者爸爸改变了主意,或者IT改变了主意,或者公司改变了主意,或者软件发行商改变了主意:如何从列表中删除项目 - 尤其是当没有人允许修改列表.

摘要:白名单不起作用.

  • @hawbsl:用户不必重新点击并重新点击.重点是让开发人员处于头脑中,并使他们实际上不需要管理访问权限.你几乎没有理由这样做.一旦整个软件生态系统使管理访问变得罕见,那么很少会向用户呈现UAC提示.然后,他们将看到管理访问权限:危险的东西,不要轻易授予.接下来的7年将是痛苦的过渡时期,开发商因为懒惰而被淘汰出局. (6认同)
  • 这是一个简单的,或许在表面上不友好的看似方法,但它可能是非常正确的.虽然在很多情况下,您的应用程序需要提升权限可能是一个很好的理由,但这只是因为应用程序不遵循最佳实践并且开始时编写得很糟糕.在大多数情况下(例如自动更新),很少需要提升权限,因此在实际需要时触发用户并不是负担.如果您的应用每次设计/可能/有缺陷时都需要它们. (3认同)
  • @Joshua Drake*"你的论点假定MS会让它留在"*姓名*任何*其他可以放置的地方.你继续跳过这一点,就像它是一个次要的实现细节.*"没有理由以管理员身份运行的每个应用程序都必须具有对该事物的写入权限."*有理由说,以管理员身份运行的每个应用程序都具有对该事物的写入权限 - 它们是管理员.要么他们有权管理机器,要么他们没有.听起来你提出某种"高级用户"安全级别.但那我如何以管理员身份运行? (2认同)

Jam*_*ley -2

用户应该能够右键单击可执行文件并转到属性 -> 兼容性 -> “以管理员身份运行此程序\xe2\x80\x99”

\n

  • 不是还是有UAC提示吗?我认为这主要是为了修复遗留应用程序崩溃,这些应用程序执行了需要管理员权限的操作,但在执行此操作之前没有要求这些权限? (2认同)