WiX: установите раздел реестра, если он не существует, и предотвратите его удаление при значительном обновлении - PullRequest
0 голосов
/ 13 февраля 2019

Моя цель - установить значение ключа реестра при новой установке или обновлении, если оно еще не существует.С этой целью я определил свойство и из поиска в реестре добавил к моему компоненту условие:

    <Property Id="AN_ID_HERE">
        <RegistrySearch Id="anIdHere"
                      Root="HKCU"
                      Key="Path\To\Key"
                      Name="Value"
                      Type="raw"/>
    </Property>

    <Fragment>
        <Component Id="MyComponentId" Guid="xxx">
            <Condition>
                <![CDATA[(NOT AN_ID_HERE)]]>
            </Condition>
            <RegistryKey Root="HKCU" Key="Path\To\Key">
                <RegistryValue Type="integer" Name="Value" Value="1" KeyPath="yes"/>
            </RegistryKey>
        </Component>
    </Fragment>

Это привело к тому, что ключ был удален, а не заменен на крупные обновления, предположительно потому, что AN_ID_HERE имеет некоторыезначение при оценке (до удаления ключа реестра).Я также попытался добавить NOT UPGRADINGPRODUCTCODE к условию, чтобы попытаться предотвратить удаление ключа, но это не имело никакого эффекта.

Я попытался найти решение, которое я назвал «запоминание шаблона свойства»:http://robmensching.com/blog/posts/2010/5/2/the-wix-toolsets-remember-property-pattern/. Моя проблема с этим методом состояла в том, что RegistrySearch будет читать REG_DWORD со значением 1 как «# 1», поэтому новое значение реестра будет установлено как REG_SZ, что не будет работать для моих целей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...