2012-09-07 13 views
12

Tengo una aplicación WinForms que debería ser realmente fácil de implementar con los archivos just y .exe. Utiliza framework 2.0, por lo que no funciona en Windows 8 de forma predeterminada. Si incluyo un archivo .config con los siguientes parámetros, que funciona bien en W8:¿Puedo especificar supportedRuntime (o cualquier otro parámetro de configuración) sin un archivo .config en .net?

<configuration> 
    <startup> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client"/> 
    <supportedRuntime version="v2.0.50727"/> 
    </startup> 
</configuration> 

Sin embargo, ahora tengo que desplegar dos archivos y esto no es aceptable. ¿Hay algo que pueda hacer para "incrustar" esos parámetros en el propio exe?

He intentado usar el autoextractor WinZip, pero tampoco es una opción, porque no puedo personalizar su interfaz.

Respuesta

12

. El ejecutable .NET contiene una pequeña porción de código nativo, que está destinado a cargar la versión CLR apropiada en un proceso.

cargador llamadas cuña (MsCorEE.dll, .NET ejecutable nativo de la dependencia de esta DLL) para cargar CLR (CLRCreateInstance en v4).
El contenido del elemento de configuración <startup> es procesado por la cuña.

Esto significa que no puede procesar <startup> elemento en el código administrado, porque no hay CLR (y ningún código administrado) en este momento. La única forma es escribir su propio host CLR. Creo que es mucho más fácil enviar su aplicación con el archivo config o crear una versión para .NET 4/4.5.

+0

Gracias Dennis, eso fue útil – rgargente

+1

Tienes toda la razón en que la información que controla la versión de .NET debe procesarse en código nativo sin la ayuda de nada administrado. Pero luego se pasa de allí al archivo de configuración, como si el código nativo solo pudiera leer archivos de configuración y no (por ejemplo) el encabezado PE o el recurso manifiesto guardado en .exe. Probablemente tengas razón y el archivo de configuración es necesario, pero si es así, es porque el shim está codificado para que solo lea el archivo de configuración, y no debido a ninguna dificultad técnica para crear un shim nativo que verifique el archivo .exe. –

0

Voy a publicar una respuesta yo mismo. IExpress, incluido con Windows, parece una buena solución para el problema.

Cuestiones relacionadas