2016-07-02 3 views
1

Следует ли разделить один компонент ниже на два компонента?Вопросы, касающиеся лучшей практики WIX

<Component Id="cmpSoftwareDLL" Guid="8401EA84-0A93-43A5-83D0-472B63418F92" Win64="$(var.MyWin64)"> 
<File Id="SoftwareDLL" Source="$(var.Software.TargetDir)\..\Release Obfuscated\Software.dll" KeyPath="yes" /> 
<Class Id="{2593B03A-8833-43EC-8F4F-A71E35CB58E6}" Context="InprocServer32" Description="Software" 
    ThreadingModel="both" ForeignServer="mscoree.dll"> 
    <ProgId Id="$(var.ProgId)" Description="Software" /> 
</Class> 

<!--Writes to Registry--> 
<RegistryValue Root="HKCR" Key="CLSID\{2593B03A-8833-43EC-8F4F-A71E35CB58E6}\Implemented Categories\{62C8FE65-4EBB-45e7-B440-6E39B2CDBF29}" Value="" Type="string" Action="write" /> 
<RegistryValue Root="HKCR" Key="CLSID\{2593B03A-8833-43EC-8F4F-A71E35CB58E6}\InprocServer32\1.0.0.0" Name="Class" Value="Software.Addin" Type="string" Action="write" /> 
<RegistryValue Root="HKCR" Key="CLSID\{2593B03A-8833-43EC-8F4F-A71E35CB58E6}\InprocServer32\1.0.0.0" Name="Assembly" Value="Software, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" Type="string" Action="write" /> 
<RegistryValue Root="HKCR" Key="CLSID\{2593B03A-8833-43EC-8F4F-A71E35CB58E6}\InprocServer32\1.0.0.0" Name="RuntimeVersion" Value="v4.0.30319" Type="string" Action="write" /> 
<RegistryValue Root="HKCR" Key="CLSID\{2593B03A-8833-43EC-8F4F-A71E35CB58E6}\InprocServer32\1.0.0.0" Name="CodeBase" Value="file:///[#SoftwareDLL]" Type="string" Action="write" /> 
<RegistryValue Root="HKCR" Key="CLSID\{2593B03A-8833-43EC-8F4F-A71E35CB58E6}\InprocServer32" Name="Class" Value="Software.Addin" Type="string" Action="write" /> 
<RegistryValue Root="HKCR" Key="CLSID\{2593B03A-8833-43EC-8F4F-A71E35CB58E6}\InprocServer32" Name="Assembly" Value="Software, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" Type="string" Action="write" /> 
<RegistryValue Root="HKCR" Key="CLSID\{2593B03A-8833-43EC-8F4F-A71E35CB58E6}\InprocServer32" Name="RuntimeVersion" Value="v4.0.30319" Type="string" Action="write" /> 
<RegistryValue Root="HKCR" Key="CLSID\{2593B03A-8833-43EC-8F4F-A71E35CB58E6}\InprocServer32" Name="CodeBase" Value="file:///[#SoftwareDLL]" Type="string" Action="write" /> 

Должен ли я включать = Ключевой путь "да" на один из этих параметров реестра? Что является следствием забывания включения KeyPath = «да» на любом из них в MSI-файле, который развернут? Могут ли они быть удалены, если произойдет переход к Windows Upgrade Path или аналогичный?

<Component Id="cmpCustomerRegistry" Guid="BD933C43-A40A-4DBA-8645-F5E80F9134F1" Win64="$(var.MyWin64)"> 
<RegistryKey Root="HKLM" Key="SOFTWARE\Policies\MySoftware"> 
    <RegistryValue Type="integer" Name="Name1" Value =0 /> 
    <RegistryValue Type="string" Name="Name2" Value ="value" /> 
    .... 
</RegistryKey> 

ответ

3

Типичные основные вопросы ответить при принятии решения, следует ли объединять или содержимое Раскол компонента являются:

Например, принципы говорят нам, чтобы отделить каждый файл PE, поэтому каждый .dll или .exe должен получить свой собственный компонент, даже если .exe может быть бесполезным без всех его зависимостей .dll. Напротив, внешние .config или .manifest файлы не стоят самостоятельно, поэтому должны быть в одном компоненте с соответствующим DLL-файлом или .exe-файлом.

Я бы сказал, что данные реестра для вашего COM-сервера не имеют смысла без самого COM-сервера. Если вы не заметили ошибку в своем инсталляторе, вам не понадобится обновлять данные реестра, не обновляя файл .dll. И нет никаких указаний об обратном. Поэтому, если у вас нет необычных потребностей (например, чтобы установить COM-сервер без его регистрации), сохраните свою .dll и ее регистрацию в одном компоненте.

+0

Спасибо, Майкл. Кажется, имеет смысл. – John

Смежные вопросы