6

WiX でインストーラーを作成しましたDWORDが、製品の修復インストール中に既存のレジストリ エントリを保持しようとしています。既存の値を保存するために、次の WiX フラグメントを使用しています。

<Property Id="PreserveMySetting" Secure="yes">
  <RegistrySearch Id="FindExistingMySetting"
                  Root="HKLM"
                  Key="Software\!(loc.ProductManufacturer)\!(loc.ProductName)"
                  Name="MySetting"
                  Type="raw"
                  Win64="no" />
</Property>

次に、保存された値によって駆動されるコンポーネントを使用して、後でこれを設定します。

問題は、レジストリ検索で DWORD が「フォーマットされた」文字列として返されることです。

#1

ただの代わりに

1

これは、コンポーネントがレジストリ エントリを設定するREG_SZと、値が "#1" の として作成されることを意味します。

<Component Id="MySettingKey"
    Guid="{76C4B14C-14BC-42E1-91F0-75C9F2A20EC8}">
    <RegistryValue Id="MySetting"
        Action="write"
        Name="MySetting"
        Value="[PreserveMySetting]"
        Type="integer"
        KeyPath="yes"
        Key="Software\!(loc.ProductManufacturer)\!(loc.ProductName)"
        Root="HKMU"/>
</Component>

コンポーネントが使用する実際のレジストリ値を取得する方法はありますか?

4

1 に答える 1

8

これは逆に聞こえますが、Type 属性を文字列に変更すると機能します。その理由は、ORCA を使用して MSI のレジストリ テーブルを確認すると明らかです。

整数 WiX 作成者の "#[PRESERVEMYSETTING]" を選択すると、文字列を選択すると作成者の [PRESERVEMYSETTING] になります。PRESERVEMYSETTING はすでに #1 であるため、##1 ではなく #1 にする必要があります。

<Component Id="MySettingKey" 
    Guid="{76C4B14C-14BC-42E1-91F0-75C9F2A20EC8}">
    <RegistryValue Id="MySetting"
        Action="write"
        Name="MySetting"
        Value="[PRESERVEMYSETTING]" <!-- Secure Properties are PUBLIC properties -->
        Type="string"
        KeyPath="yes"
        Key="Software\!(loc.ProductManufacturer)\!(loc.ProductName)"
        Root="HKMU"/>
</Component>
于 2013-01-21T19:43:50.883 に答える