2016-07-02 4 views
1

以下の単一のコンポーネントを2つのコンポーネントに分割する必要がありますか?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" /> 

私は、これらのレジストリ設定のいずれかにキーパス= "はい" を含めるべきか?デプロイされているMSIファイルにKeyPath = "yes"を含めることを忘れた場合の結果は何ですか? Windowsアップグレードパスが発生した場合などに削除できますか?

<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

結合するかどうかを決定するか、分割コンポーネントの内容際に答えるために、典型的なコアの質問は以下のとおりです。

、でも.exeファイルがかもしれないが、ガイドラインでは、各PEファイルを分離することを教え、そのそれぞれの.dllまたは.exeは、独自のコンポーネントを受けるべきですすべての.dll依存関係がなければ役に立たない。対照的に、外部の.configファイルまたは.manifestファイルは単独のファイルではありません。そのため、対応する.dllファイルまたは.exeファイルを持つ単一のコンポーネントに存在する必要があります。

COMサーバーのレジストリデータは、COMサーバー自体が無意味であると主張します。インストーラーの内容にバグがありますが、.dllファイルをアップグレードすることなくレジストリデータをアップグレードする必要はありません。それに反する指針はありません。だから、あなたは(登録せずにCOMサーバーをインストールできるように)珍しいニーズがない限り、.dllとその登録を単一のコンポーネントに入れておきます。

+0

マイケルありがとうございます。理にかなっているようだ。 – John

関連する問題