File 为什么我的应用程序允许我将文件保存到Vista中的Windows和System32文件夹中?
我有一个用Delphi7编写的应用程序,它不需要管理员权限就可以运行 由于某些原因,即使应用程序未请求UAC提升,我也能够从应用程序中将文件保存到c:\windows和c:\windows\system32。我以管理员身份登录,UAC已打开,并且我没有更改任何默认的UAC设置。这些文件实际上也显示在Windows资源管理器下。我没有使用“以管理员身份运行”选项 如果我尝试在相同的配置文件下使用写字板做同样的事情,我会得到预期的错误 知道发生了什么事吗 应用程序正在使用Ole结构化存储进行保存,并包括以下清单(如果有帮助的话)File 为什么我的应用程序允许我将文件保存到Vista中的Windows和System32文件夹中?,file,windows-vista,uac,compatibility,File,Windows Vista,Uac,Compatibility,我有一个用Delphi7编写的应用程序,它不需要管理员权限就可以运行 由于某些原因,即使应用程序未请求UAC提升,我也能够从应用程序中将文件保存到c:\windows和c:\windows\system32。我以管理员身份登录,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>
编辑:为了清楚起见,默认情况下,我的应用程序不会将任何内容保存到这些位置。我通过标准文件保存对话框选择这些位置
更新
我已经找到了为什么我的应用程序被视为遗产,尽管包括上述清单。事实证明,第二份清单也包括在内,其中没有“信任信息”部分。我已经移除了第二份清单,现在一切都好了
谢谢你的帮助
我以管理员身份运行,UAC已打开
您是说您以管理员身份登录,还是说您使用选项“以管理员身份运行”(即使用提升的令牌)运行Delphi应用程序
如果是后者,则您的应用程序将有权写入C:\Windows。这是UAC的一项功能,可使旧应用程序与Vista兼容。它将任何写入系统文件夹的请求重定向到用户没有本地文件夹权限的系统文件夹 它们存储在当前用户配置文件下的“AppData\Local\VirtualStore”文件夹下。 有一个组策略设置可禁用此功能:“将文件和注册表写入失败虚拟化到每个用户位置” 此文件和注册表虚拟化功能旨在允许旧版应用程序在Windows Vista标准用户帐户下运行。遗留应用程序定义为没有特定Vista清单的32位可执行文件。如果您提供Vista清单以将应用程序装饰为与Vista兼容,则此虚拟化设置不会影响您的应用程序(如写字板示例中所示)
Mark Russinovich在这方面有一篇很好的文章:除非您禁用了UAC,否则文件将最终位于用户目录下的虚拟位置。我是以管理员身份登录的。我没有使用“以管理员身份运行”选项。将更新以澄清