У меня есть немного состояние с версией моего WiX Bootstrapper, который находится вне поля, и я изо всех сил пытаюсь понять, как я могу обойти моя проблема с новой версией.Wix/Burn - условие, чтобы не запускать MSIPackage и, следовательно, не удалять приложение
В основном версия, которая там есть несколько элементов MSIPackage, который устанавливает SQL CLR & SMO с использованием стандартного MSIS Mircosoft в (SQLSysClrTypes.msi & SharedManagementObjects.msi) - но, к сожалению, они версии x64. Теперь это нормально для 64-битных ПК (так как наше приложение может использовать 64-битную версию), и так на этих ПК все в порядке. Но, очевидно, когда кто-то пытается и устанавливает его на 32-битной машине, он терпит неудачу.
Итак, что я хочу, чтобы новый setup.exe сделал; заключается в обнаружении, установлена ли 64-разрядная версия & - это версия (которую я делаю с помощью поиска в реестре); если это так, то ничего не делайте (т.е. не устанавливайте версию x86). Также определите, установлена ли версия x86 & это версия (опять я могу это сделать) - тогда установите только версию x86; если установлен ни x86 или x64 версия (или они не правильный вариант - в этом случае v13.0.1601.5)
Моя логика для этого была:
<util:RegistrySearch Id="IsSMOInstalledx86"
Root="HKLM"
Key="SOFTWARE\Microsoft\Microsoft SQL Server\SharedManagementObjects\CurrentVersion"
Value="Version"
Result="value"
Variable="SMOVersionx86"/>
<util:RegistrySearch Id="IsSMOInstalledx64"
Root="HKLM"
Key="SOFTWARE\Microsoft\Microsoft SQL Server\SharedManagementObjects\CurrentVersion"
Value="Version"
Win64="yes"
Result="value"
Variable="SMOVersionx64"/>
и
<MsiPackage SourceFile="$(var.DependenciesPath_Microsoft)\System CLR Types for SQL Server 2016\v13.0.1601.5\SQLSysClrTypes.msi"
Id="SQLCLR"
DisplayName="System CLR Types for SQL Server 2016"
Visible="yes"
InstallCondition="(SMOVersionx86 <> "13.0.1601.5") AND (SMOVersionx64 <> "13.0.1601.5")"
SuppressSignatureVerification="yes"/>
<MsiPackage SourceFile="$(var.DependenciesPath_Microsoft)\Shared Management Objects\v13.0.1601.5\SharedManagementObjects.msi"
Id="SQLSMO"
After="SQLCLR"
DisplayName="Shared Management Objects for SQL Server 2016"
Visible="yes"
InstallCondition="(SMOVersionx86 <> "13.0.1601.5") AND (SMOVersionx64 <> "13.0.1601.5")"
SuppressSignatureVerification="yes"/>
Но моя проблема заключается в том, что, когда это выполняется на 64-битном ПК (где SMO уже установлено), InstallCondition оценивает значение FALSE и, как четко указывает документация WiX; если он оценивается как ЛОЖЬ, тогда продукт НЕИНСТАЛИРОВАН - это, очевидно, не то, что я хочу.
Никогда не было ситуации, когда я хочу, чтобы InstallCondition оценивал значение FALSE, т.е. я никогда не должен удалять SMO (если не по какой-либо другой причине, чем пользователь мог установить, что для другого приложения использовать, а не из нашего) , Я мог бы удалить installCondition, а затем просто установил версию x86 на 32-битных и 64-битных машинах - это нормально; но немного нахаль.
Итак, что я хочу сделать в псевдо-код, это что-то вроде:
If SMOVersionx86 <> "13.0.1601.5" AND SMOVersionx64 <> "13.0.1601.5"
then
call the MSIPackages (with no installcondition or always TRUE) to INSTALL
else
don't call the MSIPackages"
Endif
т.е. если результаты состояния в FALSE; то я не хочу ничего делать ... конечно, не хочу вызывать MSIPackages с FALSE, так как это НЕ УДАЛИТЬ их.
Я изо всех сил пытаюсь развить мозги, но все они в некоторых обстоятельствах приводят к тому, что installCondition оценивает значение false и, таким образом, удаляет SMO. Я подумал, что, возможно, у меня может быть некоторая логика, которая устанавливает версию x64 на 64-битном ПК и версию x86 на 32-битном ПК, но даже тогда хотя бы одно из условий установки MSIPackage будет оцениваться как ложное и в конечном итоге удалит версию!
Любая помощь на этом будет с благодарностью принята !!
Cheers,
Big Chris.