在 Windows 7 下提升权限
Posted
技术标签:
【中文标题】在 Windows 7 下提升权限【英文标题】:Elevating Permissions Under Windows 7 【发布时间】:2011-09-02 03:58:35 【问题描述】:我有一个“自动升级”机制,它在 Windows XP 下已经工作了多年,但在 Windows 7 下失败了,因为提示用户(在 Windows XP 下从未存在过)授予程序运行权限没有出现管理员权限。
win32 程序(用 Borland Delphi 编写)使用 LogonUser() 和 ImpersonateLoggedOnUser() 来模拟用户(具有管理员权限的本地帐户),以便它可以替换 Program Files 文件夹中的选定文件。
如果我使用此用户帐户手动登录到 Windows 7,然后尝试删除 Program Files 文件夹中的文件,Windows 7 会提示我允许程序继续运行 - 如果我授予它权限,则文件将被删除,如果我拒绝权限报告'访问被拒绝'并且不允许删除。
当尝试与上述相同的事情时,“访问被拒绝”是没有任何提示给用户的结果。
我在一个类似的问题 herabouts(关于临时文件的创建(其中给出的答案的主旨是“不要这样做”)中看到这样的提示可以“在代码中”提出,但我看不到该方法的实际解释位置。
【问题讨论】:
+1 个很好的问题。你跳过 Vista 了吗? 是的,虽然我已经运行 Windows 7 一年了,但直到现在我的软件用户才准备从 Windows XP 迁移到 Windows 7,所以我不能推迟解决问题不再。 【参考方案1】:两年过去了,我的客户终于采用了 Windows 7,我终于通过替换我的拥有 Inno Setup 安装程序的自己的安装程序(包含使用 Pascal 脚本从我的安装程序继承的附加逻辑)。 Inno Set 处理所有权限问题 - 哇哦。
【讨论】:
【参考方案2】:您似乎在问如何运行提升的代码。下面的问题有几个答案,它们提供了指向您需要调用运行提升功能的信息的链接:
Delphi: Prompt for UAC elevation when needed
【讨论】:
【参考方案3】:您只需在您的application manifest 中将您的自动更新程序标记为需要提升的权限。
也就是说,您可能需要考虑在用户具有写入权限的地方安装。
【讨论】:
或者使安装时的 bin 目录在初始安装时每个人都可写。我这样做是为了远程升级无人值守的机器。 @misha 安装程序在文件夹上设置 ACL 很淘气。系统管理员会恨你的! @Misha,远程更新无人值守机器是一项管理任务,因此应该由管理员完成。您不需要使目录对每个人 都可写,只是为了让管理员可写。使其对所有人都可写意味着 任何人 都可以破坏安装。不要让非特权用户影响其他用户的体验。 @Misha,你被解雇了。 :) 这是您能做的最糟糕的事情,因为即使新的安全(以非管理员身份运行)到位,它也会使 bin 文件夹被病毒和恶意软件访问。真丢脸。 @misha 最好安装外部程序文件以上是关于在 Windows 7 下提升权限的主要内容,如果未能解决你的问题,请参考以下文章