2008-12-16 8 views
5

Tengo una aplicación escrita en Delphi 7 que no requiere un privilegio de administrador para ejecutarse.¿Por qué mi aplicación me permite guardar archivos en las carpetas de Windows y System32 en Vista?

Por alguna razón, puedo guardar archivos en c: \ windows y c: \ windows \ system32 desde la aplicación aunque la aplicación no ha 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 me sale un error como se esperaba.

¿Alguna idea de lo que está pasando?

La aplicación Th utiliza el almacenamiento estructurado de Ole 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 forma predeterminada. Estoy eligiendo estas ubicaciones a través del cuadro de diálogo estándar para guardar archivos.

actualización

he descubierto por qué mi solicitud estaba siendo tratado como legado a pesar de incluir el manifiesto anteriormente. 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

Respuesta

16

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 característica: "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 bajo 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 un proveedor de manifestar Vista para adornar su aplicación como compatible con Vista, este ajuste no afectará la virtualización de su aplicación (como en el ejemplo Wordpad)

Mark Russinovich tiene un gran artículo sobre esto: Inside Windows Vista User Account Control

0

Me postulo como administrador con el 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 es el caso, su aplicación tendrá permiso para escribir en C: \ Windows.

+0

He iniciado sesión como administrador. No he usado la opción 'Ejecutar como administrador'. Se actualizará para aclarar – Jamie

0

El los archivos terminarán en una ubicación virtual debajo de su directorio de usuario, a menos que tenga el UAC deshabilitado.

Cuestiones relacionadas