asp.net - 安装后 Windows 字体不能立即在应用程序中使用?

标签 asp.net windows fonts gdi

每当我在 Windows 2003 服务器上安装新字体时,我都无法立即在我的 asp.net web 应用程序中使用它。应用程序通过 CreateFontIndirect gdi32.dll win api 获取字体,然后使用此字体在我的 asp.net 应用程序中创建动态文本图像。字体似乎缓存在某处,因为我只会返回默认字体。

字体缓存在重启后得到更新,然后我得到了正确的字体,但显然我不想为了让新字体工作而在生产服务器上重启。

有没有办法刷新字体缓存?

最佳答案

默认情况下,当您安装新字体时,只有当前 session 会收到有关更改的通知。因此,如果您在终端服务 session 中登录服务器(这似乎很可能),那么 ASP.NET 应用程序(将在不同的 session 中运行)将看不到更改。

当您重新启动时,系统会自动扫描字体目录并将其中的所有字体“注册”到当前 session 中。

要“手动”注册新字体,您需要调用 AddFontResource并传入字体的路径。

为了让它稍微简单一些,您可以让您的应用程序扫描 Fonts 文件夹并在它在 Application_Start 事件中找到的每个文件上调用 AddFontResource。这样,当您安装新字体时,您只需回收网站(例如编辑 web.config 文件),它就会重新扫描所有文件。

另一种选择是在 Fonts 文件夹上放置目录监视(通过 FileSystemWatcher )并自动重新扫描它。

我想这取决于您安装新字体的频率...

关于asp.net - 安装后 Windows 字体不能立即在应用程序中使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2964117/

相关文章:

c# - MVC3 可选模型属性

html - 相当于 <字体大小 ="+0"> 的 CSS

html - 本地开发时在CSS中选择字体的特定样式

css - 更改 Shiny 小部件的背景和字体颜色

javascript - 反向图像搜索特定网站

asp.net - 在 ASP.NET 应用程序中安全地存储连接字符串

javascript - 对话框未返回 true,因此由于事件发生而未触发 onClick

python - 如何使用单词范围对象读取项目符号/编号列表?

windows - 在批处理文件中,如何从文件路径获取文件名?

c - GetMessageW 正在阻塞调用线程,没有接收到任何消息