私のWiX Bootstrapperのバージョンは、現場にいらっしゃっています。新しいバージョンの私の問題。そこにあるWix/Burn - MSIPackageを実行しないでアプリケーションをアンインストールしないようにするための条件
基本的にバージョンがMircosoftの標準のMSI(SQLSysClrTypes.msi & SharedManagementObjects.msi)を使用して、SQL CLR & SMOをインストールMSIPackage要素のカップルを持っている - しかし、残念ながら、彼らは、x64バージョンです。 64ビット版のPC(これは64ビット版を使うことができます)でも問題ありません。しかし、明らかに誰かが32ビットマシンで試してインストールしようとすると失敗します。
私は新しいsetup.exeに何をしたいのですか? 64ビット版がインストールされているかどうかを検出することです&バージョン(これはレジストリ検索で行います)。そうであれば何もしないでください(つまり、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"/>
しかし私の問題は、これが64bit PC(SMOがすでにインストールされている)で実行されたときです。InstallConditionはFALSEと評価され、WiXのドキュメントでは明らかにそうです。 FALSEと評価された場合、製品はUNINSTALLEDです。これは明らかに私が望むものではありません。
InstallConditionをFALSEに評価したいという状況はありません。つまり、SMOをアンインストールする必要はありません(他の理由がない場合、別のアプリケーション、つまり私たちのものではないユーザーがインストールしている可能性があります) 。私はinstallConditionを削除してから、32ビットと64ビットの両方のマシンにx86バージョンをインストールするだけです。これは問題ありません。しかしちょっとナフ。
だから、私は擬似コードで何をしたいのか、のようなものです:FALSEで条件の結果であれば
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
すなわち、私は何もしたくありません。確かにMSIPackagesをFALSEと呼ぶことは望ましくありません。
私はすべてのアイデアで脳を磨いてきましたが、状況によってはinstallConditionがfalseと評価され、SMOが削除されてしまいます。おそらく、64ビットPCにx64バージョンをインストールし、32ビットPCにx86バージョンをインストールするロジックがあるかもしれないと思っていましたが、MSIPackageのインストール条件の少なくとも1つがfalseと評価され、バージョンを削除することになりました!
これに関するお手伝いがあれば幸いです!
乾杯、
ビッグクリス。