2011-07-14 14 views
6

Error¿Por qué un archivo app.config de cero bytes causa un error muy extraño?

El volumen de un archivo ha sido modificado externamente para que el archivo abierto ya no es válido.

Esto se produce cuando tiene un app.config que es cero bytes. El error parece provenir de Windows, incluso WinDBG no lo ejecutará.

Sé que es completamente inválido tener un app.config de cero bytes, pero ¿qué causa este error, de dónde viene y por qué ocurre?

+0

Los archivos .config suelen ser archivos xml, por lo que incluso si están vacíos, al principio necesita una estructura/firma xml. Entonces, el archivo de configuración, como está vacío, no se puede analizar como XML, así que creo que es un mecanismo de seguridad interno para detener la ejecución de la aplicación, ya que ninguna herramienta o programa que altere el archivo .config lo haría tener ese estado, por lo que DEBE ser alterado a mano, lo que causaría que el programa se ejecute incorrectamente. al menos, es un paso más de una medida de seguridad. –

Respuesta

7
// 
// MessageId: ERROR_FILE_INVALID 
// 
// MessageText: 
// 
// The volume for a file has been externally altered so that the opened file is no longer valid. 
// 
#define ERROR_FILE_INVALID    1006L 

Copiado desde el archivo de encabezado WinError.h Windows SDK. El código de error simbólico aquí es obviamente mucho más pertinente que el texto del mensaje de error repetitivo. Esto no es completamente inusual Puedo ver que se usa dentro del código fuente SSCLI20 (la versión de código abierto del CLR) en código que comprueba si el ejecutable tiene el encabezado del archivo PE32 adecuado y el encabezado .NET presente en un ensamblado administrado. Claramente eso no aplica aquí.

Sin embargo, CLR está interesado en el archivo app.exe.config en un momento muy temprano en la etapa de arranque. Elementos como <supportedRuntime> deben analizarse antes de que el CLR pueda comenzar. Claramente este código no está contento con un archivo .config vacío. El código CLR es increíble así, nunca hace el colapso "vamos a tropezar de todos modos".

+0

¡Gracias por la información! Recordaré mirar WinError.h para este tipo de cosas en el futuro. Supongo que no habría forma de manejar este tipo de situación en el código administrado. –

+1

¡Por supuesto que sí! Arreglar el archivo Bueno, no, no código administrado. –

Cuestiones relacionadas