2010-06-03 17 views
12

Chaque fois que j'installe une nouvelle police sur un serveur Windows 2003, je ne peux pas l'utiliser immédiatement dans mon application web asp.net. L'application obtient la police via l'API de victoire CreateFontIndirect gdi32.dll, puis utilisez cette police pour créer une image de texte dynamique dans mon application asp.net. Il semble que les polices soient mises en cache quelque part, car je vais juste récupérer la police par défaut. Le cache de polices est mis à jour après un redémarrage, puis j'obtiens la police correcte, mais évidemment je ne voudrais pas faire un redémarrage sur un serveur de production juste pour obtenir une nouvelle police pour fonctionner.Les polices Windows ne sont pas immédiatement utilisables dans l'application après l'installation?

Existe-t-il un moyen de vider le cache de polices?

+0

Comment installez-vous les polices? –

+0

Je les installe en les copiant dans le dossier windows \ fonts. Windows affiche la barre de prgression d'installation et ils apparaissent correctement dans le dossier windows \ fonts afin qu'il semble qu'ils sont correctement installés. – Carvellis

+0

btw ils sont des polices TT normales qui fonctionnent normalement dans l'application, mais pas immédiatement après leur installation dans Windows. – Carvellis

Répondre

12

Par défaut, lorsque vous installez une nouvelle police, seule la session en cours est avertie du changement. Donc, si vous vous connectez au serveur dans une session de services Terminal Server (ce qui semble probable), alors l'application ASP.NET (qui sera exécutée dans une session différente) ne verra pas la modification. Lorsque vous redémarrez, le système scanne automatiquement le répertoire des polices et "enregistre" toutes les polices dans la session en cours. Pour enregistrer manuellement une nouvelle police, vous devrez appeler AddFontResource et passer le chemin d'accès à la police. Pour faciliter la tâche, vous pouvez faire en sorte que votre application analyse le dossier Fonts et appelle AddFontResource sur chaque fichier trouvé dans l'événement Application_Start. De cette façon, lorsque vous installez une nouvelle police, vous pouvez simplement recycler le site (par exemple, modifier le fichier web.config) et analyser de nouveau tous les fichiers.

Une autre option consisterait à placer une surveillance de répertoire (via FileSystemWatcher) dans le dossier Polices et de la re-scanner automatiquement.

Je suppose que cela dépend de la fréquence à laquelle vous allez installer de nouvelles polices ...

+1

Il n'y a donc aucune possibilité de réanalyser les polices à l'extérieur de l'application pour cette session particulière? – Carvellis

+0

'AddFontResource' ajoute la police au système pour la session * whole *, de sorte que vous pouvez exécuter un autre programme dans la même session que ASP.NET pour réanalyser le répertoire et appeler' AddFontResource', mais s'il y a beaucoup d'avantages Je ne suis pas si sûr. –

+0

Ok merci, je vais juste redémarrer le serveur cette fois. – Carvellis

1

Redémarrez IIS. Cela devrait faire l'affaire. frottez iisreset à partir de la ligne de commande ou utilisez le gestionnaire IIS.

+2

Je peux confirmer que cela ne fonctionne pas. L'explication de Dean semble être correcte. – Heinzi

+1

Cela a fonctionné pour mon application de code à barres sans redémarrer le système en utilisant System.Drawing.Font pour créer un graphique hors de la police de code à barres. – Crob

+0

cette réponse pourrait résoudre votre problème, essayez-le, il a résolu le mien. –