在Windows 7下提升权限

时间:2011-05-25 22:20:50

标签: delphi windows-7 elevated-privileges

我有一个'自动升级'机制,在Windows XP下工作多年,在Windows 7下失败,因为提示用户(在Windows XP下从未存在)授予程序运行权限管理员权限不会出现。

win32程序(用Borland Delphi编写)使用LogonUser()和ImpersonateLoggedOnUser()来模拟用户(具有管理员权限的本地帐户),以便它可以替换Program Files文件夹中的选定文件。

如果我使用此用户帐户手动登录到Windows 7,然后尝试删除Program Files文件夹中的文件,Windows 7会提示我允许程序继续执行 - 如果我授予该权限,则文件将被删除,如果我拒绝允许“拒绝访问”,并且不允许删除。

当尝试上述相同的事情时,“拒绝访问”是没有任何提示给用户的结果。

我在一个类似的问题中看到herabouts(关于临时文件的创建(其中给出的答案的主要内容非常正确'不要这样做')这样的提示可以在“代码”中提出但是我无法看到实际解释该方法的位置。

3 个答案:

答案 0 :(得分:5)

您只需将自动更新程序标记为需要application manifest中的提升权限。

那就是说你可能想考虑安装用户具有写权限的地方。

答案 1 :(得分:3)

你似乎部分在询问如何运行代码。下面的问题有几个答案,它们提供了调用运行提升功能所需信息的链接:

Delphi: Prompt for UAC elevation when needed

答案 2 :(得分:0)

两年过去了,我的客户终于采用了Windows 7,我终于绕过了我试图解决的问题(暂时取得足够的权利来替换Windows 7下的Program Files中的可执行文件)使用Inno Setup安装程序拥有自己的安装程序(使用Pascal Scripting从我的安装程序中加入附加逻辑)。 Inno Set处理所有权限问题 - 欢呼。