我有一个用Delphi 7编写的应用程序,它不需要运行管理员权限.
出于某种原因,即使应用程序未请求UAC提升,我也能够从应用程序中将文件保存到c:\ windows和c:\ windows\system32 .我以管理员身份登录并启用了UAC,但我没有更改任何默认的UAC设置.这些文件实际上也显示在Windows资源管理器下.我没有使用"以管理员身份运行"选项.
如果我尝试在相同的配置文件下使用写字板做同样的事情,我会得到预期的错误.
有什么想法发生了什么?
该应用程序使用Ole Structured Storage来保存并包含以下清单,如果有帮助的话.
编辑:要清楚,我的应用程序默认情况下不会将任何内容保存到这些位置.我通过标准文件保存对话框选择这些位置.
更新
我已经找到了为什么我的申请被视为遗产,尽管包括上述清单.事实证明,第二个清单也包括在内,没有'trustInfo'部分.我已经删除了第二个清单,现在一切都很好.
谢谢你的帮助
这是UAC的一项功能,可以使旧应用程序与Vista兼容.它会将任何写入请求重定向到用户缺少本地文件夹权限的系统文件夹.
它们存储在当前用户配置文件下的"AppData\Local\VirtualStore"文件夹下.有一个组策略设置可禁用此功能:"为每个用户位置虚拟化文件和注册表写入失败"
此文件和注册表虚拟化功能旨在允许旧版应用程序在Windows Vista标准用户帐户下运行.旧版应用程序定义为没有特定Vista清单的32位可执行文件.如果您提供Vista清单以将应用程序装饰为与Vista兼容,则此虚拟化设置不会影响您的应用程序(如在Wordpad示例中)
Mark Russinovich有一篇很棒的文章:内部Windows Vista用户帐户控制