2009-12-28 10 views
5

मैंने सी # में एक स्नैप-इन लिखा है।एमएमसी कस्टम स्नैप-इन स्थापना

मैंने इंस्टॉलुटिल का उपयोग करके इसे इंस्टॉल करने का प्रयास किया और यह पहले काम नहीं करता था। मैंने देखा कि msdn पृष्ठ पर उन्होंने gac में management.dll को स्थापित करने के लिए mmcperf चलाने के लिए कहा था।

ऐसा करने से, मैं अपना स्नैप इंस्टॉल और चलाने में सक्षम था। मेरे पास एक एक्सपी मशीन है।

मेरा सवाल यह है कि मैं अपने कस्टम स्नैप को ग्राहक मशीन पर कैसे तैनात कर सकता हूं ... मुझे क्या विचार करने की आवश्यकता है? (ओएस ?, .नेट फ्रेमवर्क, एमएमसी 3.0 स्थापित है, आदि?)

क्या मैं अपने स्नैप की स्थापना के दौरान mmcperf चला सकता हूं? क्या यह एक अच्छा दृष्टिकोण है?

उत्तर

8

आप समस्या अलग हो सकती है, लेकिन मैं एक बार 64-बिट मशीन पर एक समान समस्या में भाग गया और निम्नलिखित पाया। यदि आपकी समस्या 32/64-बिट से संबंधित नहीं है, तो मैं यह नहीं कह सकता कि समस्या क्या है, और मैं अपना समय लेने के लिए क्षमा चाहता हूं।

आप InstallUtil का उपयोग करके स्नैप-इन इंस्टॉल करने में सक्षम होना चाहिए। हालांकि, ध्यान दें कि InstallUtil पर दो अलग-अलग संस्करण हैं: x86 बाइनरी के लिए एक (डिफ़ॉल्ट), और x64 बाइनरी के लिए एक।

भले ही आप अपने सी # कोड को के लिए संकलित करते हैं, तो भी कोई भी CPU, मानक InstallUtil का उपयोग करके केवल 32-बिट स्नैप-इन के रूप में एमएमसी स्नैप-इन पंजीकृत करेगा। यदि आप 64-बिट ओएस पर चल रहे हैं, तो एमएमसी को 32-बिट प्रक्रिया (MMC /32 आईआईआरसी) के रूप में शुरू करने का प्रयास करें और देखें कि आपका स्नैप-इन वहां उपलब्ध नहीं है या नहीं।

स्नैप-इन को 64-बिट स्नैप-इन के रूप में पंजीकृत करने के लिए, आपको InstallUtil के 64-बिट संस्करण का उपयोग करना होगा (आमतौर पर C: \ Windows \ Microsoft.NET \ Framework64 \ v2.0.50727 में पाया जाता है)।

स्नैप-इन के दोनों संस्करणों को पंजीकृत करने के लिए, आपको इसे दो बार पंजीकृत करना होगा।

+0

धन्यवाद, भले ही यह सीधे मेरे मुद्दे को संबोधित नहीं करता है, यह जानना अच्छा है। मैं कस्टम क्रियाओं के साथ एमएसआई बना रहा हूं जो प्रोजेक्ट आउटपुट स्थापित करें। यदि यह 64 बिट मशीन है, तो क्या मुझे यह मानने में सही लगता है कि यह इंस्टॉलेशन प्रक्रिया के दौरान 64 बिट संस्करण स्थापित करेगा? – pdiddy

+0

मुझे वास्तव में यकीन नहीं है, लेकिन AFAIR msi फ़ाइलें या तो 32-बिट या 64-बिट हैं, इसलिए जब तक यह स्पष्ट रूप से 64-बिट एमएसआई नहीं है, मुझे लगता है कि यह 32-बिट संस्करण का उपयोग करेगा। हालांकि, आप 32-बिट मोड में एमएमसी खोलकर यह आसानी से परीक्षण कर सकते हैं कि यह देखने के लिए कि आपका स्नैप-इन उपलब्ध है या नहीं। यह वास्तव में सभी उबलता है जिसके अंतर्गत रजिस्ट्री में नोड स्नैप-इन पंजीकृत है। –

3

मार्क सीनैन की प्रतिक्रिया को जोड़ना:

तुम भी, सीधे एमएमसी रजिस्ट्री प्रविष्टियाँ जांच कर सकते हैं सत्यापित करने के लिए कि क्या आपके स्नैप-इन में 64 बिट रजिस्ट्री प्रविष्टियाँ में पंजीकृत किया गया है, या 32-बिट पुनः निर्देशित रजिस्ट्री (एक है कि पता चलता है ऊपर तहत Wow6432Node):

  • 64 बिट स्नैप-इन में: HKLM \ Software \ Microsoft \ एमएमसी \ SnapIns \ FX: {SNAP-में-GUID} ...
  • 32-बिट स्नैप-इन में: HKLM \ सॉफ्टवेयर \ Wow6432Node \ Microsoft \ MMC \ SnapIns \ FX: {SNAP-IN-GUID} ...

यदि आपकी प्रविष्टियां केवल HKLM \ Software \ Wow6432Node के अंतर्गत हैं तो आपने 32-बिट स्नैपिन पंजीकृत किए हैं, और "एमएमसी/32" चलाने के बारे में मार्क की सलाह उन्हें दिखानी चाहिए। यह दुनिया का अंत नहीं है: यदि आप अपने एमएमसी सत्र को स्नैपिन शॉर्टकट के रूप में सहेजते हैं, तो मुझे लगता है कि यह चलने पर एमएमसी के 32 बिट संस्करण को खोलता है।

यदि आप वास्तव में 64-बिट स्नैपिन पंजीकरण (और क्यों नहीं?) चाहते हैं, तो एमएसडीएन के पास कुछ और विवरणों के साथ एमएमसी 64-Bit Versus 32-Bit Considerations पर एक पृष्ठ है, जिसमें 64- बनाम 32-बिट रजिस्ट्री प्रविष्टियों को प्राप्त करने के लिए इंस्टॉल करने के लिए इंस्टॉल करने के पथ शामिल हैं।

ध्यान दें कि कुछ एमएसआई पैकेजिंग अनुप्रयोगों में वास्तव में एमएसआई के भीतर इंस्टॉलयूटी.एक्सई की एक प्रति को बाइनरी के रूप में शामिल किया गया है, लक्ष्य मशीन पर किसी को आमंत्रित करने के बजाय।(आप यह जांच सकते हैं कि यह MS12 बाइनरी टेबल और कस्टम क्रियाओं को Orca का उपयोग करके देख रहा है या नहीं।) यदि केवल 32-बिट इंस्टॉलयूट शामिल है, तो यह आपके पंजीकरण को गलत स्थान (Wow6432Node) में रखेगा, आपके लिए कठिन भाग्य।

जैसा कि मैं समझता हूं, विंडोज इंस्टालर "राइट वे" (टीएम) इंस्टॉलयूट का उपयोग नहीं करना है (मुझे लगता है कि ज्यादातर प्रबंधित एमएसआई कस्टम क्रियाओं को चलाने में शामिल मुद्दों के कारण?)। किसी भी मामले में, यदि आपने इंस्टालयूट के उपयोग से परहेज किया है तो आप एमएसआई में रजिस्ट्री प्रविष्टियों को स्पष्ट रूप से रजिस्ट्री प्रविष्टियां बनाकर पूरी तरह से अपना स्नैप पंजीकृत करेंगे, जिससे विंडोज इंस्टालर को बनाने और हटाने के नियंत्रण में रखा जा सकेगा।

  • आवश्यक रजिस्ट्री प्रविष्टियाँ MSDN के MMC Programming Elements

वैकल्पिक रूप पर वर्णित हैं, तो आप लक्ष्य मशीन के Framework64 फ़ोल्डर के अंतर्गत InstallUtil.exe आह्वान करने के लिए एक कस्टम कार्रवाई कर सकता है। यह सही स्नैपिन पंजीकरण स्थान प्राप्त करेगा, लेकिन फिर आपको इस तथ्य से निपटना होगा कि चलने के दौरान कस्टम कार्रवाई एक सीएमडी शेल विंडो पॉप अप करेगी, अगर वह आपको परेशान करती है। सुनिश्चित नहीं है कि आपके एमएसआई संलेखन उपकरण के बराबर है, लेकिन वाईएक्स में Quiet Execution Custom Action है। (मुझे लगता है कि यदि आप वाईएक्स का उपयोग नहीं कर रहे हैं तो आप अभी भी WixUtilExtension.dll को शामिल कर सकते हैं और QtExec64CmdLine प्रॉपर्टी को उचित रूप से स्थापित करने के बाद "CAQuietExec64" का आह्वान कर सकते हैं ... लेकिन यदि आप एमएसआई संलेखन के उस स्तर पर काम कर रहे हैं तो आप शायद बेहतर होंगे बस स्विच करने और वाईएक्स का उपयोग करने के लिए :)

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