17

インストール後に特定のレジストリ値が存在することをアサートしたいので、次のコンポーネントを追加しました。

<Component Id="RegistryEntryContextMenuOdt" Guid="4BA5BA24-4F65-4BDF-99EB-CB4B947F31A9" DiskId="1" KeyPath="yes">
    <RegistryKey Id="RegKeyOdt" Root="HKCR" Action="create" Key=".odt">
      <RegistryValue Type="string" Value="openDocument.WriterDocument.1" />
    </RegistryKey>
</Component>

キー/値は、インストール前にすでに設定されている場合があります。ただし、値が特定の値に設定されていること、つまり値が上書きされることを望んでいます。

私の問題は、製品がアンインストールされると、この値が常に削除されることです。ただし、インストーラーによって追加された場合にのみ、値を削除したいと考えています。インストーラーが値を変更しただけの場合は、以前の値を復元する必要があります (または、これが不可能な場合は、値をそのままにしておく必要があります)。

アンインストール時にキー自体は削除されないことに注意してください。要素に指定Action="create"したため、これは正しく機能しているようです。RegistryKey

RegistryValueインストール時に値を作成するが削除しない同様の設定はありますか?

更新: HKCR の下の両方のレジストリ キーは、マシン全体の設定です。つまり、レジストリの HKLM\SOFTWARE\Classes ブランチに由来します。

4

1 に答える 1

26

Component要素NeverOverwriteの属性を使用することにより、レジストリエントリが存在しない場合にのみコンポーネントがインストールされるようにすることができます。のwixドキュメントから:NeverOverwrite

この属性が「yes」に設定されている場合、コンポーネントのキーパスファイルまたはキーパスレジストリエントリがすでに存在する場合、インストーラはコンポーネントをインストールまたは再インストールしません。

レジストリエントリがコンポーネントキーパスであることを明確にするために、 Registry要素にKeyPath属性を設定する必要がある場合もあります。yes

レジストリ値がすでに存在していても設定したいが、アンインストール時に削除したくない場合は、Permanent代わりにComponent要素の属性を使用できます。

于 2009-04-02T15:00:48.490 に答える