我有一个在Windows XP下运行多年的“自动升级”机制,它在Windows 7下失败了,因为没有提示用户(在Windows XP下从未出现过)授予程序以管理员权限运行的权限。
win32程序(用Borland Delphi编写)使用LogonUser()和ImpersonateLoggedOnUser()来模拟用户(具有管理员权限的本地帐户),以便它可以替换program files文件夹中选定的文件。
如果我使用此用户帐户手动登录Windows 7,然后尝试删除Program Files文件夹中的文件,Windows 7会提示我是否允许该程序继续运行-如果我授予它权限,该文件将被删除;如果我拒绝权限,系统将报告“拒绝访问”,并且不允许删除。
当尝试上述相同的事情时,结果是‘访问被拒绝’,而不会给用户任何提示。
我在一个类似的问题herabout(关于临时文件的创建)中看到,这样的提示可以在代码中提出,但我看不到这种方法在哪里得到了真正的解释。
发布于 2011-05-26 06:39:25
您只需在application manifest中将自动更新程序标记为需要提升权限即可。
也就是说,您可能想要考虑在用户具有写入权限的地方进行安装。
发布于 2011-05-26 07:31:30
在某种程度上,您似乎是在问如何运行提升的代码。下面的问题有几个答案,它们提供了指向调用运行提升的功能所需信息的链接:
发布于 2013-03-11 19:44:29
两年过去了,我的客户最终采用了Windows7,我也终于有时间绕过我试图解决的问题(暂时获得了足够的权限来替换Windows7下的Program Files中的可执行文件),方法是用Inno安装程序替换我自己的安装程序(使用Pascal脚本从我的安装程序中继承了额外的逻辑)。Inno Set处理所有的权限问题--太棒了。
https://stackoverflow.com/questions/6131668
复制相似问题