2017-01-09 13 views
1

私の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 &lt;&gt; &quot;13.0.1601.5&quot;) AND (SMOVersionx64 &lt;&gt; &quot;13.0.1601.5&quot;)" 
       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 &lt;&gt; &quot;13.0.1601.5&quot;) AND (SMOVersionx64 &lt;&gt; &quot;13.0.1601.5&quot;)" 
       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と評価され、バージョンを削除することになりました!

これに関するお手伝いがあれば幸いです!

乾杯、

ビッグクリス。

答えて

0

MsiPackage has a property Permanentパッケージをアンインストールできるかどうかを宣言します。これを "yes"に設定すると、バンドルがアンインストールを試みないようになります。

ただし、新しいバンドルにそのプロパティを追加すると古いバンドルをアンインストールできないかどうかはわかりません。

関連する問題