2016-07-02 6 views
1

Sollte die einzelne Komponente unten in zwei Komponenten aufgeteilt werden?WIX Best Practices Fragen

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

Soll ich KeyPath = "Ja" zu einem dieser Registrierungseinstellungen? Was ist die Konsequenz davon, dass Sie vergessen haben, KeyPath = "yes" in eine MSI-Datei einzufügen, die bereitgestellt wird? Können sie entfernt werden, wenn ein Windows-Upgrade-Pfad passiert oder ähnlich?

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

Antwort

3

Die typischen Kernfragen zu beantworten, bei der Entscheidung zu kombinieren, oder sind Split-Komponente Inhalt:

Zum Beispiel sagen Richtlinien uns jede PE-Datei zu trennen, so dass jeder .dll oder .exe sollte seine eigene Komponente erhalten, auch wenn die .exe können ohne all seine .dll-Abhängigkeiten nutzlos sein. Im Gegensatz dazu stehen externe .config- oder .manifest-Dateien nicht eigenständig, sollten also in einer einzelnen Komponente mit der entsprechenden DLL- oder EXE-Datei übereinstimmen.

Ich würde argumentieren, dass die Registrierungsdaten für Ihren COM-Server ohne den COM-Server selbst bedeutungslos ist. Abgesehen von einem Fehler in Ihrem Installer-Inhalt müssen Sie Ihre Registrierungsdaten nie aktualisieren, ohne die DLL-Datei zu aktualisieren. Und es gibt keine Hinweise auf das Gegenteil. Wenn Sie also keine ungewöhnlichen Anforderungen haben (z. B. den COM-Server ohne Registrierung installieren zu können), behalten Sie Ihre DLL und ihre Registrierung in einer einzigen Komponente.

+0

Danke Michael. Scheint Sinn zu ergeben. – John