2010-06-03 14 views
12

Ilekroć instaluję nową czcionkę na serwerze Windows 2003, nie mogę jej natychmiast użyć w mojej aplikacji internetowej asp.net. Aplikacja pobiera czcionkę za pośrednictwem api gdi32.dll win api CreateFontIndirect, a następnie za pomocą tej czcionki tworzy dynamiczny obraz tekstowy w mojej aplikacji asp.net. Wygląda na to, że czcionki są gdzieś zbuforowane, ponieważ po prostu otrzymam domyślną czcionkę zwróconą.Czcionki Windows nie są natychmiast użyteczne w aplikacji po zainstalowaniu?

Pamięć podręczna czcionek jest aktualizowana po ponownym uruchomieniu komputera, a następnie pojawia się poprawna czcionka, ale oczywiście nie chciałbym ponownie uruchamiać serwera produkcyjnego tylko po to, aby nowa czcionka działała.

Czy istnieje sposób na wyczyszczenie pamięci podręcznej czcionek?

+0

Jak zainstalować czcionki? –

+0

Instaluję je, kopiując je do folderu windows \ fonts. Windows pokazuje pasek instalacyjny prgress i pojawiają się poprawnie w folderze windows \ fonts, więc wygląda na to, że są poprawnie zainstalowane. – Carvellis

+0

btw są to zwykłe czcionki TT, które normalnie działają w aplikacji, ale nie od razu po zainstalowaniu ich w systemie Windows. – Carvellis

Odpowiedz

12

Domyślnie po zainstalowaniu nowej czcionki, tylko zmiana bieżącej sesji jest powiadamiana o zmianie. Jeśli więc logujesz się do serwera w sesji usług terminalowych (co wydaje się prawdopodobne), aplikacja ASP.NET (która będzie działać w innej sesji) nie zobaczy zmiany.

Po ponownym uruchomieniu system automatycznie skanuje katalog czcionek i "rejestruje" wszystkie czcionki obecne w bieżącej sesji.

Aby "ręcznie" zarejestrować nową czcionkę, musisz zadzwonić pod numer AddFontResource i podać ścieżkę do czcionki.

Aby było to nieco łatwiejsze, można zrobić tak, aby aplikacja skanowała folder Czcionki i wywoływała AddFontResource w każdym znalezionym pliku w zdarzeniu Application_Start. W ten sposób, po zainstalowaniu nowej czcionki, możesz po prostu odświeżyć witrynę (np. Edytować plik web.config), a następnie ponownie zeskanować wszystkie pliki.

Inną opcją jest umieszczenie w katalogu Czcionki katalogu (za pośrednictwem FileSystemWatcher) i automatyczne ponowne jego zeskanowanie.

Myślę, że to po prostu zależy od tego jak często będziesz instalowania nowych czcionek ...

+1

Więc nie ma możliwości ponownego skanowania czcionek spoza aplikacji dla tej konkretnej sesji? – Carvellis

+0

'AddFontResource' dodaje czcionkę do systemu dla * całej * sesji, aby można było uruchomić inny program w tej samej sesji co ASP.NET, aby ponownie zeskanować katalog i wywołać' AddFontResource', ale czy przyniosłoby to wiele korzyści Nie jestem tego taki pewien. –

+0

OK, dzięki temu po prostu zrestartuję serwer. – Carvellis

1

Restart IIS. to powinno wystarczyć. rub iisreset z linii poleceń lub użyj Menedżera IIS.

+2

Mogę potwierdzić że to nie działa. Wyjaśnienie Dean'a wydaje się być poprawne. – Heinzi

+1

To działało dla mojej aplikacji kodu kreskowego bez ponownego uruchomienia systemu przy użyciu System.Drawing.Font, aby utworzyć grafikę z czcionki kodu kreskowego. – Crob

+0

ta odpowiedź może rozwiązać Twój problem, spróbować, rozwiązała moje. –

Powiązane problemy