file - que - ¿Por qué mi aplicación me permite guardar archivos en las carpetas de Windows y System32 en Vista?
que pasa si borro archivos de programa(x86) (3)
Los archivos terminarán en una ubicación virtual debajo de su directorio de usuario, a menos que tenga el UAC deshabilitado.
Tengo una aplicación escrita en Delphi 7 que no requiere un privilegio de administrador para ejecutarse.
Por alguna razón, puedo guardar archivos en c: / windows yc: / windows / system32 desde la aplicación aunque la aplicación no haya solicitado la elevación de UAC . He iniciado sesión como administrador con UAC activado y no he cambiado ninguna configuración de UAC predeterminada. Los archivos se muestran en Windows Explorer también. No estoy usando la opción ''Ejecutar como administrador''.
Si trato de hacer lo mismo usando WordPad bajo el mismo perfil, recibo un error como se esperaba.
¿Alguna idea de lo que está pasando?
La aplicación Th está utilizando Ole Structured Storage para guardar e incluye el siguiente manifiesto, si eso ayuda.
<?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>
Editar: para que quede claro, mi aplicación no guarda nada en estas ubicaciones de manera predeterminada. Estoy eligiendo estas ubicaciones a través del cuadro de diálogo estándar para guardar archivos.
Actualizar
Descubrí por qué mi aplicación estaba siendo tratada como herencia a pesar de incluir el manifiesto anterior. Resultó que también se incluía un segundo manifiesto que no tenía la sección ''trustInfo''. He eliminado este segundo manifiesto y todo está bien ahora.
Gracias por toda la ayuda
Me estoy ejecutando como administrador con UAC activado.
¿Quiere decir que ha iniciado sesión como administrador o quiere decir que ejecuta su aplicación Delphi con la opción "Ejecutar como administrador" (es decir, con un token elevado)?
Si este último es el caso, su aplicación tendrá permiso para escribir en C: / Windows.
Esta es una característica de UAC para hacer compatibles las aplicaciones antiguas con Vista. Redirige cualquier solicitud para escribir en una carpeta del sistema que el usuario no tiene permiso para una carpeta local.
Se almacenan en la carpeta "AppData / Local / VirtualStore" debajo del perfil del usuario actual. Hay una configuración de directiva de grupo para deshabilitar esta función: "Virtualizar fallas de escritura de archivo y registro en ubicaciones por usuario"
Esta característica de virtualización de archivos y registros está diseñada para permitir que las aplicaciones heredadas se ejecuten en cuentas de usuario estándar de Windows Vista. La aplicación heredada se define como un ejecutable de 32 bits sin un manifiesto de Vista específico. Si proporciona un manifiesto de Vista para decorar su aplicación como compatible con Vista, esta configuración de virtualización no afectará su aplicación (como en su ejemplo de Wordpad)
Mark Russinovich tiene un excelente artículo sobre esto: Dentro del Control de cuentas de usuario de Windows Vista