Каждый раз, когда я устанавливаю новый шрифт на сервере Windows 2003, я не могу сразу использовать его в моем веб-приложении asp.net. Приложение передает шрифт CreateFontIndirect
API победы gdi32.dll, и затем использует этот шрифт для создания изображения динамического текста в моем приложении asp.net. Кажется, что шрифты кэшируются где-нибудь, потому что я просто возвращу стандартный шрифт.
Кэш шрифта обновляется после перезагрузки, и затем я получаю правильный шрифт, но очевидно я не хотел бы делать перезагрузку на рабочем сервере только для того, чтобы заставлять новый шрифт работать.
Существует ли способ сбросить кэш шрифта?
По умолчанию, когда вы устанавливаете новый шрифт, только текущий сеанс уведомляется об изменении. Поэтому, если вы входите на сервер в сеансе служб терминалов (что кажется вероятным), то приложение ASP.NET (которое будет работать в другом сеансе) не увидит изменений.
При перезагрузке система автоматически сканирует каталог шрифтов и «регистрирует» все шрифты в нем в текущем сеансе.
Чтобы «вручную» зарегистрировать новый шрифт, вам нужно будет вызвать AddFontResource и передать путь к шрифту.
Чтобы упростить задачу, вы можете сделать так, чтобы ваше приложение сканировало папку Fonts и вызывало AddFontResource
для каждого файла, который он находит там в событии Application_Start
. Таким образом, при установке нового шрифта вы можете просто переработать сайт (например, отредактировать файл web.config), и он повторно просканирует все файлы.
Другой вариант - установить наблюдение за каталогом (через FileSystemWatcher ) в папке Fonts и автоматически повторно сканировать его.
Думаю, это просто зависит от того, как часто вы будете устанавливать новые шрифты ...