2012-06-29 10 views
5

मेरे पास सी # COM .dll है। मैं एक बार .dll इंस्टॉल करना चाहता हूं, लेकिन यह x86 और x64 दोनों के लिए पंजीकृत है। HKCR \ Wow6432Node \ CLSID, HKLM \ सॉफ्टवेयर, और HKLM \ Software \ WOW6432Node सभी को एक बारवाईएक्स: पंजीकृत .NET COM घटक दोनों x86 x64

<Component Id="NETDLL.dll" Directory="INSTALLDIR"> 
    <File Id="NETDLL.dll" Name="NETDLL.dll" KeyPath="yes" Source="..\NETDLL.dll" /> 
    <Class Id="{78BE...}" Context="InprocServer32" Description="NETDLL" ThreadingModel="both" ForeignServer="mscoree.dll"> 
    <ProgId Id="NETDLL" Description="NETDLL" /> 
    </Class> 
    <RegistryValue Root="HKCR" Key="CLSID\{78BE...}\Implemented Categories\{62C8FE65-4EBB-45e7-B440-6E39B2CDBF29}" Value="" Type="string" Action="write" /> 
    <RegistryValue Root="HKCR" Key="CLSID\{78BE...}\InprocServer32\1.0.1.0" Name="Class" Value="NETDLL" Type="string" Action="write" /> 
    <RegistryValue Root="HKCR" Key="CLSID\{78BE...}\InprocServer32\1.0.1.0" Name="Assembly" Value="NETDLL, Version=1.0.1.0, Culture=neutral" Type="string" Action="write" /> 
    <RegistryValue Root="HKCR" Key="CLSID\{78BE...}\InprocServer32\1.0.1.0" Name="RuntimeVersion" Value="v4.0.30319" Type="string" Action="write" /> 
    <RegistryValue Root="HKCR" Key="CLSID\{78BE...}\InprocServer32\1.0.1.0" Name="CodeBase" Value="file:///[#NETDLL.dll]" Type="string" Action="write" /> 
    <RegistryValue Root="HKCR" Key="CLSID\{78BE...}\InprocServer32" Name="Class" Value="NETDLL" Type="string" Action="write" /> 
    <RegistryValue Root="HKCR" Key="CLSID\{78BE...}\InprocServer32" Name="Assembly" Value="NETDLL, Version=1.0.1.0, Culture=neutral" Type="string" Action="write" /> 
    <RegistryValue Root="HKCR" Key="CLSID\{78BE...}\InprocServer32" Name="RuntimeVersion" Value="v4.0.30319" Type="string" Action="write" /> 
    <RegistryValue Root="HKCR" Key="CLSID\{78BE...}\InprocServer32" Name="CodeBase" Value="file:///[#NETDLL.dll]" Type="string" Action="write" /> 
    <RegistryValue Root="HKCR" Key="Component Categories\{62C8FE65-4EBB-45e7-B440-6E39B2CDBF29}" Name="0" Value=".NET Category" Type="string" Action="write" /> 
    <RegistryKey Root='HKLM' Key='Software\NETDLL'> 
    <RegistryValue Name='Description' Type='string' Value='NETDLL'/> 
    </RegistryKey> 
</Component> 

मैं HKCR \ CLSID में कैसे लिख सकते हैं,:

यहाँ WiX मैं है केवल 64 पंजीकरण के लिए है?

उत्तर

0

regasm.exe स्विच/x86 और/x64 आज़माएं।

आपके पास regasm.exe के 32-बिट और 64-बिट संस्करण भी हैं, एक C:\windows\microsoft .net\<version>\Framework में और दूसरा Framework64 में, देखें कि क्या इससे मदद मिलती है।

+0

लेखन कस्टम क्रियाएं एक दर्द है, और मुझे संदेह में छोड़ देता है कि यह अनइंस्टॉल या रोलबैक के साथ काम करेगा। ऐसा लगता है कि मुझे एचकेएलएम में मूल्य जोड़ने के लिए 'reg.exe' निष्पादित करने की आवश्यकता होगी। –

+0

regasm.exe/x86 या/x64 कमांड लाइन स्विच का समर्थन नहीं करता है। –

0

फ़ाइल की दो प्रतियां इंस्टॉल करें, प्रत्येक ProgramFiles64Folder और ProgramFilesFolder के तहत प्रत्येक एक स्थापित करें। वेस्ट .5 एमआईबी, लेकिन सरल है।

+0

क्या यह आवश्यक है कि आप .NET असेंबली को किसी भीCPU के साथ संकलित करें? – tronda

0

मैं दो घटक, 64 बिट के लिए एक और 86 पंजीकरण के लिए एक साथ चारों ओर खेल कर 86 और 64 बिट के लिए एक 64 बिट सिस्टम पर एक ही dll पंजीकरण के सफल रहा:

<Component Id="NETDLL.dll" Directory="INSTALLDIR" Guid="*"> 
    <Class Id="{78BE...}" Context="InprocServer32" Description="NETDLL" 
     ThreadingModel="both" ForeignServer="mscoree.dll"> 
     <ProgId Id="NETDLL" Description="NETDLL" /> 
    </Class> 
    <File Id="NETDLL.dll" Name="NETDLL.dll" KeyPath="yes" 
      Source="..\NETDLL.dll" /> 
    <RegistryValue Root="HKCR" Key="CLSID\{78BE...}\Implemented Categories {62C8FE65-4EBB-45e7-B440-6E39B2CDBF29}" Value="" Type="string" Action="write" /> 
    ... 
</Component> 
<Component Id="NETDLLWin64.dll" Guid="{885F75B1-3046-42BD-8B37-F8FA0E8D7A51}" Win64="yes" Directory="INSTALLDIR"> 
    <Class Id="{78BE...}" Context="InprocServer32" Description="NETDLL" ThreadingModel="both" ForeignServer="mscoree.dll"> 
     <ProgId Id="NETDLL" Description="NETDLL" /> 
    </Class> 
    <RegistryValue Root="HKCR" Key="CLSID\{78BE...}\Implemented Categories\{62C8FE65-4EBB-45e7-B440-6E39B2CDBF29}" Value="" Type="string" Action="write" /> 
    ... 
</Component> 

मैं Guid जोड़ा - घटक नोड में गुण, दूसरे घटक के लिए आईडी बदल दिया और Win64 = "yes" विशेषता जोड़ा। इसके अलावा मैं फ़ाइल को डुप्लिकेट नहीं करता हूं। उम्मीद है कि इससे मदद मिलती है, अगर आपके पास बहुत निर्भरताएं हैं और फाइलों को डुप्लिकेट नहीं करेंगे।

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