2015-09-17 10 views
17

हमने एक ऐसा उत्पाद विकसित किया है जो एक मानक वीएसटीओ एडिन (वर्ड 2010 और वर्ड 2013, केवल x86) है। डिफ़ॉल्ट रूप से स्थापित होने पर, यह सभी उपयोगकर्ताओं के लिए स्थापित किया जाता है (यानी एडिन रजिस्ट्री प्रविष्टियां HKLM - HKEY_LOCAL_MACHINE\SOFTWARE\[Wow6432Node]\Microsoft\Office\Word\Addins में डाली जाती हैं)।एमएस ऑफिस वर्ड वीएसटीओ "मांग पर लोड"

LoadBehavior reg कुंजी के लिए मूल्य 0x3 पर सेट होने पर (यानी "स्टार्टअप पर लोड"), ऐड काम करता है बिल्कुल ठीक, लेकिन हम 0x10 को LoadBehavior के लिए मान सेट जब (यानी "मांग पर लोड"), जैसा कि हम उम्मीद करेंगे ऐड काम नहीं करता:

कारण यूएसी (और उस पद ऊंचा नहीं चलता है), HKLM में LoadBehavior का मूल्य एक LoadBehavior कुंजी बनाने के द्वारा 0x9 को 0x10 से बदल नहीं है, लेकिन इसके बजाय ओवरराइड की गई है (करने के लिए एचकेसीयू हाइव में मूल्य 0x9) के साथ।

दुर्भाग्य से, हम मिल गया है जब तक प्रकट कुंजी LoadBehavior) के साथ HKCU छत्ता में मौजूद है कि इस HKCU ओवरराइड मूल्य खाते नहीं किया जाता है। https://social.msdn.microsoft.com/Forums/vstudio/en-US/3776734b-333e-423b-9c08-7c7a441c3e94/load-behavior-and-word-addin?forum=vsto

इस समस्या के लिए 'स्पष्ट' उपाय प्रत्येक उपयोगकर्ता के लिए HKCU में Manifest लिखने के लिए (HKLM में के रूप में भी) है, जब प्रत्येक उपयोगकर्ता ऐड चलाने समय या स्थापित है: यह संबंधित धागा बारे में अधिक जानकारी पहली बार। इस तरह के सक्रिय सेटअप उपयोग करने की आवश्यकता के रूप में

  • ऐड की स्थापना रद्द करने की आवश्यकता है उन लोड हो रहा है समस्याओं का सामना कर (यह अनुशंसित नहीं है को रोकने के लिए हर उपयोगकर्ता HKCU मूल्यों को दूर करने और अन्य मुद्दों/जटिलताओं बन गया है: वहाँ इस दृष्टिकोण के साथ तथापि कुछ गंभीर कमियां हैं - Remove registry keys under HKCU on a per machine installation)।
  • उपयोगकर्ता जिनके पास इन मूल्यों को उनके (रोमिंग) एचकेसीयू हाइव में है, वे एक ही डोमेन में मशीन पर लॉगिन करते समय समस्याएं अनुभव करते हैं, जिनमें हमारे एडिन इंस्टॉल नहीं होते हैं।

यह एक बग है कि प्रकट HKLM जहां LoadBehavior HKCU में उचित रूप से सेट किया गया है से प्राप्त नहीं है? मुझे लगता है कि एचसीएलएम में LoadBehavior को Manifest मूल्य को ओवरराइड करने की आवश्यकता के बिना एचकेसीयू में ओवरराइड किया जा सकता है, तो यह समस्या हल हो जाएगी।

कोई भी इस मुद्दे को दूर करने के तरीके के बारे में जानता है?

उत्तर

0

कारण आप का उपयोग कर रहे हैं पर लोड करें MSDN में वर्णित स्टार्टअप प्रदर्शन को बेहतर बनाने की संभावना है। हालांकि, लोड-ऑन-डिमांड मुद्दों के पूरे सेट के साथ आता है (गतिशील रिबन यूआई राज्य के लिए कोई समर्थन नहीं, एचकेएलएम तैनाती आदि के साथ समस्याएं)।

जैसा कि आपने पहले ही कहा है, के साथ कोई समस्या नहीं है स्टार्टअप पर लोड करें। इसलिए, आपके ऐड-इन को लोड करने का अनुशंसित तरीका LoadBehavior0x3 का मान उपयोग करना है।

यदि आपको अपने ऐड-इन्स लोड प्रदर्शन के साथ समस्याएं आ रही हैं, तो एक समाधान हल्के वजन वाले ऐड-इन का उपयोग करना हो सकता है जो हमेशा स्टार्टअप पर लोड होता है और फिर यह ऐड-इन वास्तविक जोड़ के लिए लोडर के रूप में कार्य करता है -इन।

+0

इस @ डार्क-वोल्मार के लिए धन्यवाद। बस स्पष्ट करने के लिए, 'LoadOnDemand' का उपयोग करने के पीछे मुख्य कारण यह नहीं है क्योंकि हमारे पास धीमी ऐड-इन है, लेकिन ऐसा इसलिए है क्योंकि हमारे पास बहुत सारे और बहुत से ऐड-इन्स हैं जो सभी व्यवसाय महत्वपूर्ण हैं। ये संसाधनों के लिए प्रतिस्पर्धा करते हैं और अक्सर "संघर्ष" और एक ही समय में लोड होने पर त्रुटि। हां हमें ऐसी दुनिया में रहना है जहां हम दूसरे के ऐड-इन्स नहीं बदल सकते हैं, और जब आपके पास जितने अधिक ग्राहक हैं, तो आप उन्हें अपने भार को बेहतर बनाने के लिए नहीं कह सकते हैं। – RoKa

1

यूएसी को "कभी सूचित न करें" पर सेट करने के लिए छोटा, मुझे सीधे आपके मुद्दों पर काबू पाने के तरीके के बारे में पता नहीं है।हालांकि, मैं एक समाधान का सुझाव देने जा रहा हूं जो आपको मांग पर लोड पर लोड करने की अनुमति देगा।

मेरा सुझाव है कि आप बदलना अपने VSTO ऐड के LoadBehavior0x0 को (अनलोड - अपने आप लोड नहीं है) और फिर एक स्वचालित रूप से लोड टेम्पलेट में एक VBA आदेश का उपयोग करें जब नियंत्रित करने के लिए अपने ऐड भार। ये कदम उठाएँ की एक रूपरेखा रखना है:

  1. दृश्य स्टूडियो में सुनिश्चित करें कि आपके ऐड में रिबन एक XML फ़ाइल (दृश्य डिजाइनर का उपयोग नहीं बनाई गई) के रूप में कोडित किया गया है। इस रिबन के भीतर एक कस्टम नेमस्पेस परिभाषित करें।
  2. वर्ड टेम्पलेट बनाएं (.dotm)। Custom UI Editor for Microsoft Office का उपयोग इस टेम्पलेट के भीतर एक्सएमएल को एक रिबन टैब के लिए एम्बेड करें जिसे लेबल किया गया है और आपके एड-इन से एक जैसा ही है। एक्सएमएल में नेमस्पेस को अपने विजुअल स्टूडियो एक्सएमएल कोड में से एक जैसा परिभाषित करें ताकि वे वही नेमस्पेस साझा कर सकें। साथ ही, एक बटन परिभाषित करें जो आपके एडिन को लोड करेगा (और शायद आपके एडिन के भीतर अतिरिक्त कार्य भी करेगा)।
  3. अपने टेम्पलेट के भीतर एक उप इस कोड का उपयोग कर अपने उतार 0x0 ऐड लोड करने के लिए लिखें:

    Application.COMAddIns(ProgID).Connect = True

    ProgID या तो अपने ProgID का आइटम IDEX या उद्धरण में ProgID का वास्तविक नाम है।

  4. अपने टेम्पलेट के भीतर एक कॉलबैक लिखें जो बटन से एडिन लोड करने के लिए कोड को कॉल करेगा।

  5. वर्ड की STARTUP निर्देशिका में टेम्पलेट रखें। वर्ड 2010 के लिए है कि C:\Program Files (x86)\Microsoft Office\Office14\STARTUP

क्या हम क्या करना चाहते है कि जब वर्ड शुरू की है VSTO ऐड स्थापित किया गया है, लेकिन लोड नहीं है है। आपके द्वारा बनाए गए टेम्पलेट को STARTUP निर्देशिका से स्वचालित रूप से लोड किया गया है और Word के भीतर आपके एप्लिकेशन के लिए रिबन टैब रखता है। चूंकि वीएसटीओ एडिन लोड नहीं होता है, इसलिए वे नियंत्रण वर्तमान में दिखाई नहीं दे रहे हैं। हालांकि, ऊपर दिए गए चरणों को लागू करने के बाद, जब टेम्पलेट के एक्सएमएल से बटन क्लिक किया जाता है, तो आपका एडिन उसी नियंत्रण पर उसी नियंत्रण को लोड करेगा क्योंकि वे नामस्थान साझा करते हैं। और जब शब्द बंद हो जाता है और फिर से लॉन्च किया जाता है, तो यह VSTO एडिन को स्थापित किया जाता है लेकिन लोड नहीं होता है।

एक कदम और आगे इस ले रहा है, यदि आप VSTO ऐड नियंत्रण को लोड करने की अतिरिक्त क्लिक से बचना चाहते थे, तो आप क़यास खाके में VSTO ऐड के XML पुन: बनाने के लिए और अपने VSTO ऐड लोड करने के लिए प्रत्येक नियंत्रण कॉल कोड हो सकता था, को छिपाने टेम्पलेट के रिबन नियंत्रण, और अपनी एडिन की कार्यक्षमता प्रदर्शन करते हैं। इस तरह आपके पास टेम्पलेट के एक्सएमएल और असली एडिन लोडिंग और मांग पर प्रदर्शन करने वाले कार्यों द्वारा प्रदान किया गया प्लेसहोल्डर रिबन होगा।

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