2010-06-03 20 views
12

Cada vez que instalo una fuente nueva en un servidor de Windows 2003, no puedo usarla inmediatamente en mi aplicación web asp.net. La aplicación obtiene la fuente a través del CreateFontIndirect gdi32.dll win api, y luego utiliza esta fuente para crear una imagen de texto dinámico en mi aplicación asp.net. Parece que las fuentes se almacenan en caché en alguna parte, porque solo obtendré la fuente predeterminada devuelta.¿Las fuentes de Windows no se pueden utilizar inmediatamente en la aplicación después de la instalación?

La fuente de la memoria caché se actualiza después de un reinicio, y luego obtengo la fuente correcta, pero obviamente no me gustaría hacer un reinicio en un servidor de producción solo para obtener una nueva fuente.

¿Hay una manera de limpiar la caché de fuente?

+0

¿Cómo instalas las fuentes? –

+0

Los instalo copiándolos en la carpeta windows \ fonts. Windows muestra la barra de progreso de instalación y aparecen correctamente en la carpeta windows \ fonts, por lo que parece que están instalados correctamente. – Carvellis

+0

Por cierto, son fuentes regulares TT que normalmente funcionan en la aplicación, pero no inmediatamente después de instalarlas en Windows. – Carvellis

Respuesta

12

De forma predeterminada, cuando instala una nueva fuente, solo se notifica el cambio a la sesión actual . Por lo tanto, si inicia sesión en el servidor en una sesión de servicios de terminal (lo que parece probable), entonces la aplicación ASP.NET (que se ejecutará en una sesión diferente) no verá el cambio.

Al reiniciar, el sistema analiza automáticamente el directorio de fuentes y "registros" todas las fuentes en que hay en la sesión actual.

Para "manualmente" registrar un nuevo tipo de letra, tendrá que llamar AddFontResource y pasar en el camino hacia la fuente.

Para hacerlo un poco más fácil, podría hacer que su aplicación escanee la carpeta Fonts y llame al AddFontResource en cada archivo que encuentre allí en su evento Application_Start. De esta forma, cuando instale una fuente nueva, puede reciclar el sitio (por ejemplo, edite el archivo web.config) y volverá a analizar todos los archivos.

Otra opción sería poner un reloj de directorio (a través de FileSystemWatcher) en la carpeta Fuentes y automáticamente volver a escanearlo.

supongo que sólo depende con qué frecuencia se va a instalar nuevas fuentes ...

+1

Entonces, ¿no hay posibilidad de volver a escanear las fuentes desde fuera de la aplicación para esa sesión en particular? – Carvellis

+0

'AddFontResource' añade la fuente al sistema para el conjunto * * sesión, por lo que podría ejecutar otro programa en la misma sesión que ASP.NET para volver a escanear el directorio y llamar' AddFontResource', pero si no habría mucho beneficio No estoy muy seguro. –

+0

Ok, gracias, voy a reiniciar el servidor esta vez. – Carvellis

1

Reiniciar IIS. Eso debería hacer el truco. frotar iisreset desde la línea de comandos o usar el administrador de IIS.

+2

puedo confirmar que esto no funciona La explicación de Dean parece ser correcta. – Heinzi

+1

Esto funcionó para mi aplicación de código de barras sin un reinicio del sistema usando System.Drawing.Font para crear un gráfico de la fuente del código de barras. – Crob

+0

esta respuesta podría resolver su problema, pruébelo, solucionó el mío. –

Cuestiones relacionadas