13

我有一个“自动升级”机制,它在 Windows XP 下已经工作了很多年,但在 Windows 7 下失败了,因为提示用户(在 Windows XP 下从未存在过)授予程序以管理员权限运行的权限确实没出现。

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

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

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

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

4

3 回答 3

5

您只需在应用程序清单中将您的自动更新程序标记为需要提升的权限。

也就是说,您可能要考虑在用户具有写入权限的地方安装。

于 2011-05-25T22:39:25.037 回答
3

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

Delphi:在需要时提示 UAC 提升

于 2011-05-25T23:31:30.257 回答
0

两年过去了,我的客户终于采用了 Windows 7,我终于绕过了我试图解决的问题(暂时获得足够的权利来替换 Windows 7 下的 Program Files 中的可执行文件),方法是将我自己的安装程序替换为一个 Inno Setup 安装程序(包含使用 Pascal 脚本从我的安装程序继承的附加逻辑)。Inno Set 处理所有权限问题 - 欢呼。

于 2013-03-11T11:44:28.970 回答