2010-06-03 25 views
12

Bất cứ khi nào tôi cài đặt phông chữ mới trên máy chủ Windows 2003, tôi không thể sử dụng nó ngay lập tức trong ứng dụng web asp.net của mình. Ứng dụng này nhận font thông qua api chiến thắng ggdi32.dll, và sau đó sử dụng phông chữ này để tạo ra một hình ảnh văn bản động trong ứng dụng asp.net của tôi. Nó có vẻ như phông chữ được lưu trữ ở đâu đó, bởi vì tôi sẽ chỉ nhận được phông chữ mặc định trả về.Phông chữ Windows không thể sử dụng ngay lập tức trong ứng dụng sau khi cài đặt?

Bộ đệm phông được cập nhật sau khi khởi động lại và sau đó tôi nhận được phông chữ chính xác, nhưng rõ ràng tôi không muốn khởi động lại trên máy chủ sản xuất chỉ để tạo phông chữ mới.

Có cách nào để xóa bộ nhớ cache phông chữ không?

+0

Làm thế nào để bạn cài đặt phông chữ? –

+0

Tôi cài đặt chúng bằng cách sao chép chúng vào thư mục windows \ fonts. Windows cho thấy thanh prgress cài đặt và chúng xuất hiện chính xác trong thư mục windows \ fonts vì vậy có vẻ như chúng được cài đặt đúng. – Carvellis

+0

btw chúng là các phông chữ TT thông thường thường hoạt động trong ứng dụng, không ngay sau khi cài đặt chúng trong cửa sổ. – Carvellis

Trả lời

12

Theo mặc định, khi bạn cài đặt phông chữ mới, chỉ phiên hiện tại mới được thông báo về thay đổi. Vì vậy, nếu bạn đang đăng nhập vào máy chủ trong một phiên dịch vụ đầu cuối (có vẻ như có khả năng) thì ứng dụng ASP.NET (sẽ chạy trong một phiên khác) sẽ không thấy thay đổi.

Khi bạn khởi động lại, hệ thống sẽ tự động quét thư mục phông chữ và "đăng ký" tất cả các phông chữ trong đó vào phiên hiện tại.

Để "thủ công" đăng ký phông chữ mới, bạn cần phải gọi AddFontResource và chuyển vào đường dẫn đến phông chữ.

Để làm cho nó dễ dàng hơn một chút, bạn có thể làm cho ứng dụng của bạn quét thư mục Phông chữ và gọi AddFontResource trên mỗi tệp mà nó tìm thấy ở đó là sự kiện Application_Start. Bằng cách đó, khi bạn cài đặt phông chữ mới, bạn chỉ có thể tái chế trang web (ví dụ: chỉnh sửa tệp web.config) và nó sẽ quét lại tất cả các tệp.

Một tùy chọn khác là đặt đồng hồ thư mục (qua FileSystemWatcher) vào thư mục Phông chữ và tự động quét lại.

Tôi đoán nó chỉ phụ thuộc vào tần suất bạn sẽ cài đặt phông chữ mới ...

+1

Vì vậy, không có khả năng để quét lại các phông chữ từ bên ngoài ứng dụng cho phiên cụ thể đó? – Carvellis

+0

'AddFontResource' thêm phông chữ vào hệ thống cho phiên * toàn bộ *, vì vậy bạn có thể chạy một chương trình khác trong cùng một phiên làm ASP.NET để quét lại thư mục và gọi' AddFontResource', nhưng liệu có nhiều lợi ích hay không Tôi không chắc lắm. –

+0

Ok cảm ơn, tôi sẽ khởi động lại máy chủ lần này. – Carvellis

1

Khởi động lại IIS. Điều đó sẽ làm các trick. rub iisreset từ dòng lệnh hoặc sử dụng trình quản lý IIS.

+2

Tôi có thể xác nhận điều này không hiệu quả. Lời giải thích của Dean có vẻ đúng. – Heinzi

+1

Điều này làm việc cho ứng dụng mã vạch của tôi mà không cần khởi động lại hệ thống bằng System.Drawing.Font để tạo hình ảnh ra khỏi phông chữ mã vạch. – Crob

+0

câu trả lời này có thể giải quyết vấn đề của bạn, hãy thử nó, nó đã giải quyết được vấn đề của tôi. –

Các vấn đề liên quan