¿Por qué mi aplicación me permite guardar archivos en las carpetas Windows y System32 en Vista?

StackOverflow https://stackoverflow.com/questions/370837

Pregunta

Tengo una aplicación escrita en Delphi 7, que no requiere privilegios que un administrador para funcionar.

Por alguna razón, yo soy capaz de guardar archivos en c: \ windows y c: \ windows \ system32 desde la aplicación a pesar de la aplicación no ha solicitado la elevación de UAC . Me abren una sesión como administrador con UAC activado y no he cambiado ninguna de las configuraciones predeterminadas de UAC. Los archivos muestran realmente en el explorador de Windows, así. No estoy usando el "Ejecutar como administrador opción.

Si trato de hacer lo mismo con WordPad bajo el mismo perfil consigo un error como se esperaba.

Alguna idea de lo que está pasando?

Th aplicación está utilizando Ole almacenamiento estructurado para ahorrar 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 que mi aplicación no guardar nada en estas ubicaciones por defecto. Estoy eligiendo estos lugares a través del archivo estándar de diálogo de grabación.

Actualizar

He descubierto por qué mi solicitud estaba siendo tratado como legado a pesar de incluir el manifiesto anteriormente. Resulta un segundo manifiesto también ser incluido, que no tienen la sección 'trustInfo'. He eliminado esta segunda manifiesto y todo está bien ahora.

Gracias por toda la ayuda

¿Fue útil?

Solución

Esta es una característica de la UAC para hacer que las aplicaciones antiguas compatible con Vista. Se vuelve a dirigir cualquier solicitud para escribir en una carpeta del sistema que el usuario carece de permiso para una carpeta local.

Se almacenan en la carpeta "AppData \ Local \ VirtualStore" bajo el perfil del usuario actual. Hay una política de grupo para desactivar esta característica: "virtualizar los fallos de archivo y escritura de Registro por ubicaciones de usuario"

Esta características de virtualización de archivos y registro están diseñados para permitir que las aplicaciones heredadas se ejecuten bajo cuentas de usuario estándar de Windows Vista. uso de la herencia se define como un ejecutable de 32 bits sin un manifiesto específica Vista. 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: Dentro Windows Vista Control de cuentas de usuario

Otros consejos

  

Me postulo como administrador con el UAC activado.

¿Quiere decir que ha iniciado sesión como administrador o ¿Quiere decir que se ejecuta la aplicación de Delphi con la opción "Ejecutar como administrador" (es decir, con un token elevado)?

Si éste es el caso de su aplicación tendrá permiso para escribir en C: \ Windows

.

Los archivos terminarán en un lugar virtual en el directorio del usuario, a menos que tenga UAC desactivado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top