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

Asp.net Windows字体在安装后不能立即在应用程序中使用?,asp.net,windows,fonts,gdi,Asp.net,Windows,Fonts,Gdi,每当我在Windows 2003服务器上安装新字体时,我都无法在asp.net web应用程序中立即使用它。应用程序通过CreateFontIndirectgdi32.dll win api获取字体,然后使用此字体在我的asp.net应用程序中创建动态文本图像。似乎字体会被缓存在某个地方,因为我只会返回默认字体 字体缓存在重新启动后得到更新,然后我得到了正确的字体,但很明显,我不想仅仅为了让新字体正常工作而在生产服务器上重新启动 是否有办法刷新字体缓存?默认情况下,安装新字体时,只有当前会话会收

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

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


是否有办法刷新字体缓存?

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

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

要“手动”注册新字体,您需要调用并传递字体路径

为了让它稍微简单一点,你可以让你的应用程序扫描字体文件夹,并在它的
应用程序启动
事件中找到的每个文件上调用
AddFontResource
。这样,当你安装一个新字体时,你可以循环使用这个网站(例如编辑web.config文件),它会重新扫描所有的文件

另一个选择是在Fonts文件夹上放置目录监视(via),并自动重新扫描它


我想这取决于你安装新字体的频率…

重新启动IIS。这应该能奏效。从命令行删除iisreset或使用IIS管理器。

我回收使用字体的应用程序池,并将其修复。

如何安装字体?我通过将字体复制到windows\fonts文件夹来安装字体。Windows显示安装程序栏,它们正确显示在Windows\fonts文件夹中,因此看起来它们安装正确。顺便说一句,它们是在应用程序中正常工作的常规TT字体,只是在windows中安装字体后不能立即进行。因此无法从应用程序外部重新扫描该特定会话的字体?
AddFontResource
在整个会话中将字体添加到系统中,因此,您可以在与ASP.NET相同的会话中运行另一个程序来重新扫描目录并调用
AddFontResource
,但我不确定这是否会带来很多好处。这也适用于服务。为了让他们“看到”一种新字体,机器必须重新启动。只是重新启动服务没有帮助。我可以确认这不起作用。Dean的解释似乎是正确的。这对我的条形码应用程序有效,而无需重新启动系统,使用system.Drawing.Font使用条形码字体创建图形。这个答案可以解决您的问题,试试看,它解决了我的问题。IIS重新启动对我有效,就像在另一台服务器上回收应用程序池一样。