Мой WIX-установщик должен проверить ранее установленную версию программного обеспечения.Если есть более старая установка, она должна быть установлена по тому же пути.Я использую RegistrySearch для выполнения этой проверки.
<Property Id="TARGETDIR">
<RegistrySearch Id="InstallLocation" Root="HKLM" Key="SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\[ANYVERSION]" Name="InstallLocation" Type="directory" Win64="no" />
</Property>
где [ANYVERSION] определяется в
<Upgrade Id="MyGUID">
<UpgradeVersion Property="OLDVERSION" IncludeMinimum="yes" IncludeMaximum="no" Maximum="$(var.VERSION)" Minimum="0.0.0.0" OnlyDetect="no" />
<UpgradeVersion Property="NEWVERSION" IncludeMinimum="no" Minimum="$(var.VERSION)" Maximum="99.99.99.99" IncludeMaximum="no" OnlyDetect="yes" />
<UpgradeVersion Property="EQUALVERSION" IncludeMinimum="yes" Minimum="$(var.VERSION)" Maximum="$(var.VERSION)" IncludeMaximum="yes" OnlyDetect="yes" />
<UpgradeVersion Property="ANYVERSION" IncludeMinimum="yes" Minimum="0.0.0.0" Maximum="99.99.99.99" IncludeMaximum="yes" OnlyDetect="yes" />
</Upgrade>
Мой чек работает нормально, когда уже установлена другая версия моего программного обеспечения.
Когда не было более ранней установки моего программного обеспечения, проверки работают также с одним исключением: когда установлено другое приложение, которое записывает запись (сname installLocation ) без подузла (GUID) в HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstall проверка возвращает installLocation этого приложения.Что не так в моем чеке?
Почему RegistrySearch возвращает installLocation записи без подузла?
Есть ли возможность заставить это работать с RegistrySearch, или мне нужно написать свой собственный CustomAction?