2

私の会社には多くの製品がありSoftware\$(var.Manufacturer)ます。顧客が複数の製品をインストールした場合にすべての製品を含むレジストリキーを作成したいと思います(おそらく)次に、削除される各製品のセカンダリキーを作成しますアンインストールしますが、メインのものはアンインストールしません。以下のようにこれを達成しようとしましたが、メインキーが削除されるため、他のすべての製品もレジストリから削除されます。これは些細なことですが、答えが見つかりません。

<DirectoryRef Id="TARGETDIR">
  <Component Id="Registry" Guid="*" MultiInstance="yes" Permanent="yes">
    <RegistryKey Root="HKLM" Key="Software\$(var.Manufacturer)" ForceCreateOnInstall="yes">
      <RegistryValue Type="string" Name="Default" Value="true" KeyPath="yes"/>
    </RegistryKey>
  </Component>
</DirectoryRef>

<DirectoryRef Id="TARGETDIR">
  <Component Id="RegistryEntries" Guid="*" MultiInstance="yes" >
    <RegistryKey Root="HKLM" Key="Software\$(var.Manufacturer)\[PRODUCTNAME]" Action="createAndRemoveOnUninstall">
      <RegistryValue Type="string" Name="Installed" Value="true" KeyPath="yes"/>
      <RegistryValue Type="string" Name="ProductName" Value="[PRODUCTNAME]"/>
    </RegistryKey>
  </Component>
</DirectoryRef>

編集:次のコードを使用したままにするためのレジストリキーを取得しました。ただし、すべての製品が削除されるのはすべて削除されるだけであり、必要に応じて1つずつ削除されるわけではありません。

<DirectoryRef Id="TARGETDIR">
  <Component Id="Registry" Guid="FF75CA48-27DE-430E-B78F-A1DC9468D699" Permanent="yes" Shared="yes" Win64="$(var.Win64)">
    <RegistryKey Root="HKLM" Key="Software\$(var.Manufacturer)" ForceCreateOnInstall="yes">
      <RegistryValue Type="string" Name="Default" Value="true" KeyPath="yes"/>
    </RegistryKey>
  </Component>
</DirectoryRef>

<DirectoryRef Id="TARGETDIR">
  <Component Id="RegistryEntries" Guid="D94FA576-970F-4503-B6C6-BA6FBEF8A60A" Win64="$(var.Win64)" >
    <RegistryKey Root="HKLM" Key="Software\$(var.Manufacturer)\[PRODUCTNAME]" ForceDeleteOnUninstall="yes">
      <RegistryValue Type="string" Name="Installed" Value="true" KeyPath="yes"/>
      <RegistryValue Type="string" Name="ProductName" Value="[PRODUCTNAME]"/>
    </RegistryKey>
  </Component>
</DirectoryRef>
4

1 に答える 1

1

Guid = "*"は、おそらくここではうまく機能しません。Shared属性をtrueに設定して、静的GUIDを使用する必要があります(複数の製品で共有できるように、おそらくフラグメントで)。サブキーの場合と同じように実行できます。

このようにして、MSIは親キーのカウントを適切に参照し、いつ削除するかを認識します。

于 2012-09-11T18:15:53.120 に答える