Моя цель - установить значение ключа реестра при новой установке или обновлении, если оно еще не существует.С этой целью я определил свойство и из поиска в реестре добавил к моему компоненту условие:
<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, что не будет работать для моих целей.