2011-07-28 12 views
5

यह प्रश्न heat.exe से आउटपुट को संदर्भित करता है। मैं एमएसआई में COM इंटरऑप के लिए कुछ .NET असेंबली पंजीकृत करने के संबंध में "सही चीज़" करने की कोशिश कर रहा हूं। Regasm.exe गलत बात है।डब्ल्यूएक्सएस में, मैं एक फाइल को कैसे संदर्भित करता हूं जो एक अलग घटक के माध्यम से स्थापित है?

Regasm.exe सीधे कॉलिंग, जो आसान है और "ज्यादातर" काम करता है, नहीं जाहिरा तौर पर एक अच्छा विचार है, says Rob Mensching है। वह ब्लॉग पोस्ट बताता है कि क्यों यह एक अच्छा विचार नहीं है, और बहुत सरल समाधान भी प्रदान करता है। दुर्भाग्य से 2004 से पोस्ट एक विक्स सुविधा का सुझाव देता है जिसे अब हटा दिया गया है या समर्थित नहीं है। वर्णित समाधान अब वैध नहीं है, मुझे लगता है, लेकिन उस ब्लॉग पोस्ट में रखी गई समस्या बनी हुई है।

स्पष्ट रूप से समस्या का "सही" समाधान heat.exe को चलाने और फिर निर्देशिका संदर्भों को ठीक करने के लिए है। यह काफी आसान लगता है, और यही वह है जो मैं करने की कोशिश कर रहा हूं।

ठीक है, इसलिए मैं सही काम करने की कोशिश कर रहा हूं। इसके अलावा मैं असेंबली जीएसी नहीं चाहता हूं, जिसका मतलब है कि मुझे codebase तर्क के साथ COM पंजीकरण करना होगा।

<RegistryKey Root="HKCR" Key="CLSID\{xxx-GUID-HERE-xxx-xxx}\InprocServer32\1.2.3.4" > 
     <RegistryValue Name="Class" Value="My.DotNet.Classname.Here" Type="string" /> 
     <RegistryValue Name="Assembly" Value="Strongname of .NET Assembly here" /> 
     <RegistryValue Name="RuntimeVersion" Value="v2.0.50727" Type="string" /> 
     <RegistryValue Name="CodeBase" Value="file:///[#fil4B562083D141F5A2F29E28A1BD09AF3E]" Type="string" /> 
    </RegistryKey> 

पहला सवाल: क्या ठीक Value="file:///[#fil4B562083D141F5A2F29E28A1BD09AF3E]" है heat.exe के उत्पादन में कुछ इस तरह भी शामिल है?

मुझे लगता है कि fil4B562083D141F5A2F29E28A1BD09AF3E एक आईडी है जो विक्स द्वारा उत्पन्न की जाती है; आईडी .wxs फ़ाइल में फ़ाइल तत्व से संबंधित है, जो असेंबली (डीएलएल) के पथ को संदर्भित करती है जिसमें नामित .NET क्लास है। अब, ऑक्टोथोरपे के लिए वास्तव में क्या है? और वर्ग ब्रैकेट्स? और file:/// उपसर्ग? इस वाक्यविन्यास को समझने में मेरी सहायता करें।

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

लेकिन प्रश्न में फ़ाइल एक अलग घटक में स्थापित है। जब मैं उस फ़ाइल को संदर्भित करने का प्रयास करता हूं, तो मुझे इस तरह के त्रुटि संदेश का एक गुच्छा मिलता है:

C:\dev\project\ComRegistration.wxs(397): warning LGHT1076: ICE69: Mismatched component reference. 
    Entry 'reg9652ABFDD2B970C523070996FE7BB510' of the Registry table belongs to 
    component 'C.ComRegistration'. However, the formatted string in column 'Value' references 
    file 'MyAssembly.dll' which belongs to component 'C.Main'. Components are in the same 
    feature. [C:\dev\project\MyProject.wixproj] 

मैं इसे कैसे हल करूं?

मुझे लगता है कि मैं इस घटक में File तत्व नहीं चाहता, उसी फाइल सिस्टम फ़ाइल का जिक्र करता हूं। यह पहले से ही एक अलग घटक (एक ही सुविधा) के साथ स्थापित है। मैं इसका उल्लेख कैसे कर सकता हूं?

असल में मैं FileRef जैसे तत्व चाहता हूं, लेकिन यह स्पष्ट रूप से मौजूद नहीं है।

उत्तर

5

[#fileId] को फ़ाइल के पथ से बदल दिया गया है। (पूरी सूची के लिए "Formatted" in the MSI SDK देखें।)

आप रजिस्ट्री मानों और फ़ाइल को उसी घटक में डालकर ICE69 से बच सकते हैं। आईसीई 6 9 आपको बता रहा है कि फाइल के पंजीकरण के बिना फाइल को स्थापित करने की संभावना है। (एक hypothetical FileRef उस समस्या को हल नहीं करेगा।) उन्हें एक साथ रखो, समस्या नहीं हो सकती है और ICE69 शिकायत नहीं करेगा।

+0

यदि कोई पूछ सकता है तो कोई "उन्हें एक साथ रखकर" जाएगा? मुझे एक ही समस्या है: मेरे मुख्य डब्ल्यूएसएक्स में, मैं अपने इंस्टॉलर को कॉन्फ़िगर कर रहा हूं जिसे रजिस्ट्रीवैल लिखना होगा, और वहां मुझे एक फ़ाइल आईडी का संदर्भ देना होगा जो मेरी गर्मी से उत्पन्न wsx फ़ाइल में मौजूद है। – JDR

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

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