WIX - RegistrySearch возвращает неправильное расположение установки - PullRequest
3 голосов
/ 01 сентября 2010

Мой 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?

1 Ответ

1 голос
/ 01 сентября 2010

Это потому, что ANYVERSION будет пустым, если ничего не найдено, и путь будет оценен как HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstall.

Одним из решений (хотя и не слишком элегантным) является захват поиска в реестре в другом свойстве и установка только свойства, которое должно содержать ваш установочный каталог (здесь TARGETDIR, вероятно, также не является правильным выбором), если определено ANYVERSION, через настройки свойств настраиваемого действия.

...