2008-10-27 14 views
5

से regasm के साथ .NET CCW को कैसे पंजीकृत करें मेरे पास .NET सेवा अनुप्रयोग के लिए एक सेटअप प्रोजेक्ट है जो एक .NET घटक का उपयोग करता है जो एक COM इंटरफ़ेस (COM कॉल करने योग्य रैपर/सीसीडब्लू) का खुलासा करता है। घटक लक्ष्य मशीन पर काम पाने के लिए, यहविजुअल स्टूडियो 2008 सेटअप प्रोजेक्ट

/tlb उत्पन्न करने के लिए typelib में अनिवार्य है स्विच

Regasm.exe/tlb/codebase component.dll में पंजीकृत होना आवश्यक है इस मामले में, अन्यथा मैं उस असेंबली से वस्तुओं को नहीं बना सकता।

सवाल यह है कि, मैं इस असेंबली को regasm/tlb पर कॉल के साथ पंजीकृत करने के लिए अपने विजुअल स्टूडियो 2008 सेटअप-प्रोजेक्ट को कैसे कॉन्फ़िगर कर सकता हूं?

उत्तर

13

इसके बजाय आप System.Runtime.InteropServices.RegistrationServices का उपयोग करके Regasm.exe करने के लिए मैन्युअल कॉल खो सकते हैं:

[System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)] 
public override void Install(IDictionary stateSaver) 
{ 
base.Install(stateSaver); 

RegistrationServices regsrv = new RegistrationServices(); 
if (!regsrv.RegisterAssembly(GetType().Assembly, AssemblyRegistrationFlags.SetCodeBase)) 
{ 
    throw new InstallException("Failed to register for COM Interop."); 
} 

} 

[System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)] 
public override void Uninstall(IDictionary savedState) 
{ 
base.Uninstall(savedState); 

RegistrationServices regsrv = new RegistrationServices(); 
if (!regsrv.UnregisterAssembly(GetType().Assembly)) 
{ 
    throw new InstallException("Failed to unregister for COM Interop."); 
} 
} 

यह अनइंस्टॉल करने पर लाइब्रेरी को अनियंत्रित करता है।

+1

इस कोड को क्या जोड़ा जाना चाहिए? मेरे पास एक वीबीनेट प्रोजेक्ट है जिसे regasm की आवश्यकता है और इसमें कुछ सी # निर्भरताएं हैं। इन दो तरीकों को कक्षा में जोड़ा जा सकता है जो सुपरक्लास या इंटरफ़ेस लागू करता है? – Amala

+0

मुझे लगता है कि ये दो विधियां एक कक्षा में जाती हैं जो System.Configuration.Install.Installer को ओवरराइड करती है, तो यह एकल वर्ग प्राथमिक आउटपुट के रूप में जोड़ा जाता है? मुझे यकीन नहीं है कि इस वर्ग या इन कार्रवाइयों को इंस्टॉलर में कैसे जोड़ना है। क्या वे स्वचालित रूप से असेंबली के साथ जुड़ जाएंगे या क्या मुझे कोई कार्रवाई जोड़ने की ज़रूरत है? – Amala

+0

'" मुझे यकीन नहीं है कि इस वर्ग या इन क्रियाओं को इंस्टॉलर में कैसे जोड़ना है। " [वुल्फविर्ड से लिंक] देखें (http://leon.mvps.org/DotNet/RegasmInstaller.html) किसी अन्य उत्तर में , अपने इंस्टॉलर पैकेज में इसे जोड़ने के तरीके के विवरण के लिए। यह उत्तर लिंक किए गए आलेख में कोड का एक संशोधन है। – transistor1

1

आपकी सेवा में इंस्टॉलर क्लास होना चाहिए। OnAfterInstall ईवेंट में पंजीकरण करें और RegAsm पर कॉल करें: पथ को Windows निर्देशिका से गणना की जानी चाहिए और एक विशिष्ट .Net संस्करण से जुड़ा होना चाहिए।

4
  1. अपनी मुख्य परियोजना (जिसमें वह श्रेणी है जिसमें आप पंजीकरण करना चाहते हैं) में, प्रोजेक्ट फ़ाइल पर राइट क्लिक करें और जोड़ें/नया आइटम चुनें और इंस्टॉलर क्लास का चयन करें। यह clsRegisterDll.cs की तरह कुछ कॉल
  2. डिजाइनर है कि प्रतीत होता है, या सही समाधान एक्सप्लोरर में clsRegisterDll.cs फ़ाइल क्लिक करें और कोड देखें
  3. अवहेलना स्थापित करें, कमिट 'कोड दृश्य पर स्विच करने के लिए यहाँ क्लिक' पर क्लिक करें में और स्थापना रद्द करें विधियां जोड़ने:

    // regasm स्ट्रिंग regasmPath = System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory() + @ "Regasm.exe" के स्थान प्राप्त; // हमारे डीएलएल स्ट्रिंग घटकपैथ = टाइपऑफ (रजिस्टरएस्प्लोर) का स्थान प्राप्त करें। एस्प्लोर्स। स्थान; // विनियमन निष्पादित करें
    सिस्टम। डायग्नोस्टिक्स.प्रोसेस.स्टार्ट (regasmPath, "/ codebase/tlb \" "+ घटकपाथ +" \ "");

    अनइंस्टॉल कार्रवाई में/के लिए स्वैप/कोडबेस/tlb/u।

  4. अपनी परियोजना
  5. अपने संस्थापक में संकलित करें, सुनिश्चित करें कि आप ऐप्लिकेशन फ़ोल्डर में अपने dll को शामिल किया है, और फिर संस्थापक परियोजना राइट क्लिक करें और देखें का चयन करें/कस्टम क्रिया
  6. राइट-क्लिक करें स्थापित करें, और उसके बाद क्लिक करें आवेदन फ़ोल्डर पर कस्टम क्रिया
  7. डबल क्लिक करें, और फिर अपने dll
  8. पर कमिट के लिए कार्रवाई
  9. बिल्ड करते ही और परीक्षण अपने संस्थापक

एक वास्तविक वर्ग आप का प्रयास करने के लिए के साथ एक पूर्वाभ्यास में पाया जा सकता: http://leon.mvps.org/DotNet/RegasmInstaller.html

+1

वुल्फविर्ड्स का लिंक बदल गया है http://leon.mvps.org/DotNet/RegasmInstaller.aspx – dashrb

1

मैंने शुरुआत में इंस्टॉलर प्रक्रिया से नियम चलाने की कोशिश की (इससे पहले कि मैंने यह पोस्ट देखा)। Regasm चलाने की कोशिश कर रहा है, और सभी त्रुटियों को संभालने में समस्याग्रस्त था - विंडोज 7 के लिए उन्नत विशेषाधिकारों को संभालने की कोशिश किए बिना भी।

Runtime.InteropServices.RegistrationServices.RegisterAssembly का उपयोग करना बहुत साफ था और एक बहुत ही बेहतर त्रुटि फँसाने प्रदान की गई।

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