2012-11-20 19 views
5

सेट है, मैं CreateRibbonExtensibilityObject() को एडिन पर कॉल करने पर VSTO Addin में Office/Excel का संस्करण निर्धारित करना चाहता हूं। मैं इस के साथ एक समस्या का सामना करना पड़ा है, और सामना करना पड़ा:इससे पहले वीएसटीओ 4 में कार्यालय संस्करण निर्धारित करें। आवेदन

  • ऐड की this.Applicationnull है, यह अभी तक इस समय VSTO से सेट नहीं है।
  • ThisAddIn_Startup(..) को CreateRibbonExtensibilityObject() के बाद बुलाया जाता है।

this.Application.Version अभी तक उपलब्ध नहीं है क्योंकि एडिन इस समय अभी तक शुरू नहीं हुआ है। क्या एक्स्टिन पर CreateRibbonExtensibilityObject() पर VSTO रनटाइम कॉल करते समय Excel (12, 14, या 15) का संस्करण निर्धारित करने का कोई तरीका है?

अद्यतन

ढूँढना कि ItemProvider instantiated था, मैं प्रमुख कार्यालय संस्करण प्राप्त करने के लिए निम्न प्रयोग किया जाता है।

FieldInfo temp = this.ItemProvider.GetType().GetField("_officeVersion", BindingFlags.NonPublic | BindingFlags.Instance); 
uint officeVersion = (uint)temp.GetValue(this.ItemProvider); 

मैं स्लाइवरनिंजा के उत्तर को भी स्वीकार कर रहा हूं।

+0

करने के लिए [एक और सवाल] जवाब (https://stackoverflow.com/questions/28925050/how-to-know-which-word-version-is-installed-from-my-add-in- रिबन-के-सी-shar) इस प्रश्न के आधार पर सुझाव देता है (कि इसे स्टार्टअप विधि में पुनर्प्राप्त नहीं किया जा सकता है) अब एप्लिकेशन-स्तरीय ऐड-इन के लिए मान्य नहीं है। मैंने स्टार्टअप विधि में दस्तावेज़-स्तर समाधान में भी कोशिश की, और यह ठीक था। – Chris

+0

@ क्रिस, जिसका इस प्रश्न से कोई लेना-देना नहीं है। CreateRibbonExtensibilityObject को स्टार्टअप विधि से पहले बुलाया जाता है। इस प्रश्न ने विशेष रूप से स्टार्टअप विधि से पहले संस्करण को कैसे प्राप्त किया है। – Dan

+0

आह, मेरी गलती। – Chris

उत्तर

5

आप currently running Office process (excel.exe) का उपयोग करने की System.Diagnostics उपयोग कर सकते हैं, हड़पने path to the process filename (MainModule), तो FileInfoVersion का उपयोग major product version निर्धारित करने के लिए।

int majorVersion = FileVersionInfo.GetVersionInfo(Process.GetCurrentProcess().MainModule.FileName).ProductMajorPart; 
0

मैं MainModule की FileVersionInfo उपयोग कर रहा हूँ। मुझे आशा है कि यह संस्करण की जानकारी निकालने के लिए फ़ाइल पहुंच को बचाएगा।

int majorVersion = Process.GetCurrentProcess().MainModule.FileVersionInfo.ProductMajorPart; 
संबंधित मुद्दे