2012-06-29 17 views
5

Mam C# COM .dll. Chciałbym zainstalować .dll raz, ale muszę go zarejestrować zarówno dla x86, jak i x64.WiX: zarejestruj składnik .NET COM zarówno x86 x64

Oto WiX Mam do rejestracji tylko 64:

<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> 

Jak mogę napisać w HKCR \ CLSID, HKCR \ Wow6432Node \ CLSID, HKLM \ Software i HKLM \ Software \ Wow6432Node wszystko na raz?

Odpowiedz

0

Wypróbuj przełączniki regasm.exe/x86 i/x64.

Masz również wersje 32-bitowe i 64-bitowe regasm.exe, jedną w C:\windows\microsoft .net\<version>\Framework i drugą w Framework64, sprawdź, czy to pomaga.

+0

Pisanie CustomActions jest uciążliwe i pozostawia mnie w przekonaniu, że zadziała w przypadku odinstalowania lub wycofania. Wygląda na to, że będę musiał wykonać 'reg.exe', aby dodać wartości do HKLM. –

+0

regasm.exe nie obsługuje przełączników wiersza poleceń/x86 lub/x64. –

0

Zainstaluj dwie kopie pliku, po jednej pod ProgramFiles64Folder i ProgramFilesFolder. Odpady .5MiB, ale jest proste.

+0

Czy to wymaga kompilacji zestawu .NET z AnyCPU? – tronda

0

udało mi rejestracji tego samego dll w systemie 64 bitowym dla x86 i 64bit przez odtwarzanie z dwóch części, jedna dla 64-bitowych i jeden dla rejestracji x86:

<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> 

dodałem Guid - Atrybuty w węźle komponentu zmieniły identyfikator dla drugiego komponentu i dodały atrybut Win64 = "yes" Attribut. Również nie duplikuję pliku. Mam nadzieję, że to pomoże, jeśli masz wiele zależności i nie będzie duplikować plików.

Powiązane problemy