2011-08-19 2 views
15

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

मैं यह कैसे कर सकता हूं?

+0

रजिस्ट्री की जांच करना बहुत आसान तरीका है। Http://stackoverflow.com/questions/244517/where-is-a-reliable-registry-key-to-find-install-location-of-excel-2007 – Zenwalker

+0

पढ़ें "क्या आप हमें इसके बारे में कुछ और बता सकते हैं दुर्घटनाओं? " हो सकता है कि उस क्षेत्र में कुछ प्रासंगिक कोड शामिल हो जो क्रैश हो ताकि हम आपके उपयोग/आवश्यकताओं की भावना प्राप्त कर सकें? – ckittel

+0

अच्छी तरह से दुर्घटनाग्रस्त हो गया है, क्योंकि कोई एक्सेल स्थापित नहीं है, त्रुटि यह है: "सीएलएसआईडी {00024500-0000-C000-0000000000046} के साथ COM फैक्ट्री को पुनर्प्राप्त करना निम्न त्रुटि के कारण विफल रहा: 80040154 कक्षा पंजीकृत नहीं है (HRESULT से अपवाद : 0x80040154 (REGDB_E_CLASSNOTREG))। "इस मामले में एक कोशिश पकड़ने में बहुत अच्छा काम है जैसा आपने नीचे बताया है [मैंने अभी कोशिश की है], हालांकि मैं सिर्फ कोड को थोड़ा और लक्षित करना चाहता था" लक्षित "और एक्सेल के अस्तित्व के लिए खोज । यहां आवश्यकता है कि उपयोगकर्ता को चेतावनी दी जाए कि वर्तमान फेज में परियोजना को एमएस एक्सेल की आवश्यकता है और फॉर्म 1 खोलने की कोशिश न करें, इसलिए यह संदेश – Karapapas

उत्तर

32
Type officeType = Type.GetTypeFromProgID("Excel.Application"); 
if (officeType == null) 
{ 
    //no Excel installed 
} 
else 
{ 
    //Excel installed 
} 
2

एक त्वरित सुधार के रूप में आप केवल अपवाद पकड़ सकते हैं और उचित त्रुटि प्रबंधन लागू कर सकते हैं। फिर आप वहां उपयोगकर्ता को सूचित कर सकते हैं।

2

यह ब्लॉग पोस्ट यहां बताया गया है कि verify if Excel is installed via the registry (VB.NET कोड कैसे आसानी से सी # में परिवर्तित किया जा सकता है)। असल में, आप HKEY_CLASSES_ROOT\Excel.Application\CurVer कुंजी के माध्यम से सत्यापित करने जा रहे हैं।

3
const string ASSEMBLY2003 = "Microsoft.Office.Interop.Excel, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"; 

static bool IsAssemblyInstalled(string assembly) 
{ 
    try 
    { 
     s_assemblyExcel = Assembly.Load(assembly); 
     return true; 
    } 
    catch 
    { 
     return false; 
    } 
} 

इस चाल करना होगा, बस सभी संस्करणों

और इसे इस तरह किया जा सकता है के लिए यह करना भी

RegistryKey key = Registry.ClassesRoot; 
RegistryKey excelKey = key.OpenSubKey("Excel.Application"); 
bool excelInstalled = excelKey == null ? false : true; 
+1

डाउनवॉटेड क्योंकि एक असेंबली लोड करना सिर्फ यह देखने के लिए कि यह स्थापित है या नहीं, (और आप इसे अपने स्वयं के एपडोमेन में किए बिना इसे अनलोड भी नहीं कर सकते हैं) – Larry

2

यह अपने विशिष्ट सवाल का जवाब नहीं है, लेकिन इसे वैकल्पिक दिशा से निपटता है ...

क्या यह वास्तविक है ly need एमएस एक्सेल स्थापित करने के लिए, या क्या आपको कंप्यूटर को एक्सेल फाइलों प्रदर्शित करने में सक्षम होना चाहिए? उदाहरण के लिए, यदि उपयोगकर्ता के पास लिबर ऑफिस या कोई अन्य एक्सेल-फ़ाइल संगत एप्लिकेशन इंस्टॉल है, तो क्या यह स्वीकार्य होगा?

हमारे पास एक ऐसा एप्लिकेशन है जो उपयोगकर्ता के लिए एक्सेल फ़ाइलें और पीडीएफ फाइलें खोलता है। हम इन फ़ाइलों को देखने के लिए वास्तव में परवाह नहीं करते कि उनके कंप्यूटर पर उनके पास कौन सा सॉफ़्टवेयर है। यह वास्तव में हमारी चिंता नहीं है। हम फ़ाइल को Process.Start(...) फ़ाइल और ओएस को वहां से ले जाने दें।

हम कॉल को Try/Catch ब्लॉक में लपेटते हैं और यदि इस कॉल के परिणामस्वरूप त्रुटि होती है तो उपयोगकर्ता सुझाव प्रदान करें; सुझाव, जैसे कि उनके पास Office (Excel) स्थापित नहीं हो सकता है, या वे एक पीडीएफ व्यूअर गायब हैं। असल में, सक्रिय रूप से यह पहचानने की कोशिश करने की बजाय कि उपयोगकर्ता का कंप्यूटर कार्रवाई करने के लिए एक पूर्ण पर्याप्त स्थिति में है, हम मानते हैं कि यह है, लेकिन फिर स्थिति को संभालने के बाद जब हम इसे खोज लेंगे।

+0

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

+0

@ क्रिस वास्तव में, यदि आप मूल पुस्तकालयों/एपिस के साथ कोई इंटरऑप करने जा रहे हैं, तो मेरा सुझाव व्यापक है- चिह्न। जैसा कि आपने नोट किया है, मेरा सुझाव केवल इन फ़ाइलों को नहीं बनाते समय प्रदर्शित होता है। – ckittel

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