我有一个用 Delphi 7 编写的应用程序,不需要管理员权限即可运行。
由于某种原因,我能够从应用程序内将文件保存到 c:\windows 和 c:\windows\system32,即使应用程序未请求 UAC 提升。我以管理员身份登录UAC已开启我没有更改任何默认的 UAC 设置。这些文件实际上也显示在 Windows 资源管理器下。我没有使用“以管理员身份运行”选项。
如果我尝试在同一配置文件下使用写字板执行相同的操作,我会收到预期的错误。
有什么想法吗?
该应用程序正在使用 Ole 结构化存储来保存并包含以下清单(如果有帮助的话)。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity type="win32" name="DelphiApplication" version="1.0.0.0" processorArchitecture="*"/>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
publicKeyToken="6595b64144ccf1df"
language="*"
processorArchitecture="*"/>
</dependentAssembly>
</dependency>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges>
<requestedExecutionLevel
level="asInvoker"
uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
编辑:要明确的是,我的应用程序默认情况下不会将任何内容保存到这些位置。我通过标准文件保存对话框选择这些位置。
Update
我发现为什么我的应用程序被视为遗留应用程序,尽管包含上述清单。事实证明,还包括第二个清单,其中没有“trustInfo”部分。我已经删除了第二个清单,现在一切都很好。
感谢所有的帮助
这是UAC的一个功能,可以让旧的应用程序兼容Vista。它将任何写入用户缺乏本地文件夹权限的系统文件夹的请求重定向。
它们存储在当前用户配置文件下的“AppData\Local\VirtualStore”文件夹下。
有一个组策略设置可以禁用此功能:“将文件和注册表写入失败虚拟化到每个用户位置”
此文件和注册表虚拟化功能旨在允许旧应用程序在 Windows Vista 标准用户帐户下运行。旧应用程序被定义为没有特定 Vista 清单的 32 位可执行文件。如果您提供 Vista 清单来将您的应用程序装饰为 Vista 兼容,则此虚拟化设置不会影响您的应用程序(如写字板示例中所示)
马克·鲁西诺维奇(Mark Russinovich)对此有一篇很棒的文章:Windows Vista 用户帐户控制内部
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)