2010-06-03 13 views
12

जब भी मैं एक विंडोज 2003 सर्वर पर एक नया फ़ॉन्ट स्थापित करता हूं, तो मैं इसे अपने एएसपीनेट वेब एप्लिकेशन में तुरंत उपयोग नहीं कर सकता। आवेदन CreateFontIndirect gdi32.dll जीत एपीआई के माध्यम से फ़ॉन्ट प्राप्त करता है, और उसके बाद मेरे एएसपीनेट अनुप्रयोग में एक गतिशील पाठ छवि बनाने के लिए इस फ़ॉन्ट का उपयोग करें। ऐसा लगता है जैसे फोंट कहीं कैश हो जाते हैं, क्योंकि मुझे बस डिफ़ॉल्ट फ़ॉन्ट वापस मिल जाएगा।विंडोज फोंट स्थापित करने के बाद आवेदन में तुरंत उपयोग नहीं किया जा सकता है?

रीबूट के बाद फ़ॉन्ट कैश अपडेट हो जाता है, और फिर मुझे सही फ़ॉन्ट मिलता है, लेकिन स्पष्ट रूप से मैं काम करने के लिए एक नया फ़ॉन्ट प्राप्त करने के लिए उत्पादन सर्वर पर रीबूट नहीं करना चाहता।

क्या फ़ॉन्ट कैश फ्लश करने का कोई तरीका है?

+0

आप फ़ॉन्ट्स कैसे इंस्टॉल करते हैं? –

+0

मैं उन्हें विंडोज़ \ fonts फ़ोल्डर में कॉपी करके उन्हें स्थापित करता हूं। विंडोज इंस्टॉलेशन बार बार दिखाता है और वे विंडोज़ \ फोंट फ़ोल्डर में सही ढंग से दिखाई देते हैं, ऐसा लगता है कि वे सही तरीके से स्थापित हैं। – Carvellis

+0

बीटीडब्ल्यू वे नियमित टीटी फोंट हैं जो आमतौर पर एप्लिकेशन में काम करते हैं, बस विंडोज़ में स्थापित करने के तुरंत बाद नहीं। – Carvellis

उत्तर

12

डिफ़ॉल्ट रूप से, जब आप एक नया फ़ॉन्ट स्थापित करते हैं, तो केवल वर्तमान सत्र परिवर्तन की अधिसूचना दी जाती है। इसलिए यदि आप किसी टर्मिनल सेवा सत्र (जो संभवतः लगता है) में सर्वर में लॉग इन कर रहे हैं तो एएसपी.NET एप्लिकेशन (जो एक अलग सत्र में चल रहा है) में परिवर्तन दिखाई नहीं देगा।

जब आप रीबूट करते हैं, तो सिस्टम स्वचालित रूप से फ़ॉन्ट निर्देशिका को स्कैन करता है और वर्तमान सत्र में सभी फ़ॉन्ट्स को "रजिस्टर्स" स्कैन करता है।

एक नया फ़ॉन्ट "मैन्युअल रूप से" पंजीकृत करने के लिए, आपको AddFontResource पर कॉल करने और फ़ॉन्ट के पथ में जाने की आवश्यकता होगी।

इसे थोड़ा आसान बनाने के लिए, आप इसे बना सकते हैं ताकि आपका ऐप फ़ॉन्ट्स फ़ोल्डर स्कैन कर सके और AddFontResource पर प्रत्येक फ़ाइल पर Application_Start ईवेंट में उसे कॉल करें। इस तरह, जब आप एक नया फ़ॉन्ट स्थापित करते हैं, तो आप साइट को रीसायकल कर सकते हैं (उदा। Web.config फ़ाइल संपादित करें) और यह सभी फ़ाइलों को फिर से स्कैन करेगा।

एक और विकल्प फ़ॉन्ट फ़ोल्डर पर एक निर्देशिका घड़ी (FileSystemWatcher के माध्यम से) डालना होगा और स्वचालित रूप से इसे फिर से स्कैन करना होगा।

मुझे लगता है कि यह सिर्फ निर्भर करता है कि आप कितनी बार नए फ़ॉन्ट स्थापित हो जाएगा ...

+1

तो उस विशेष सत्र के लिए आवेदन के बाहर से फोंट को पुन: स्थापित करने की कोई संभावना नहीं है? – Carvellis

+0

'AddFontResource' * पूरे * सत्र के लिए सिस्टम में फ़ॉन्ट जोड़ता है, ताकि आप निर्देशिका को फिर से स्कैन करने के लिए ASP.NET के समान सत्र में एक और प्रोग्राम चला सकें और' AddFontResource 'पर कॉल कर सकें, लेकिन क्या बहुत लाभ होगा मुझे बहुत ज़्यादा यकीन नहीं है। –

+0

ठीक है धन्यवाद, मैं इस बार सर्वर को रीबूट कर दूंगा। – Carvellis

1

पुनः प्रारंभ आईआईएस। यह ट्रिक काम आना चाहिए। कमांड लाइन से iisreset रगड़ें या आईआईएस प्रबंधक का उपयोग करें।

+2

मैं पुष्टि कर सकता हूं यह काम नहीं करता है। डीन की व्याख्या सही साबित होती है। – Heinzi

+1

यह बारकोड फ़ॉन्ट से ग्राफ़िक बनाने के लिए System.Drawing.Font का उपयोग कर सिस्टम रीबूट किए बिना मेरे बारकोड एप्लिकेशन के लिए काम करता है। – Crob

+0

यह उत्तर आपकी समस्या का समाधान कर सकता है, इसे आज़माएं, यह मेरा हल हो गया। –

संबंधित मुद्दे

 संबंधित मुद्दे