1

個別のマージモジュールを備えたx86用のVisualC++2008ランタイムコンポーネントのインストールを含むWiXプロジェクトがあります。

残念ながら、MSIv4.5の.msmにはよく知られた問題があります。具体的には、.msmカスタムアクションSxSUninstallCAは、アンインストール時に完了するのに20分かかります。

つまり、簡単に言うと、新しいバージョンの製品から.msmを削除し、.exeファイルを使用してVC++コンポーネントをサイレントインストールすることにしました。

これだけ(そしてもちろんProductCode)を変更すると、インストーラーはマシンに既にインストールされている製品を検出せず、古いバージョンを最初にアンインストールせずに通常のインストールを実行します。

ここで何が起こっているのかについて何か考えはありますか?MSIはUpgradeCodeとProductCodeをチェックして、製品がシステムにすでにインストールされている別の製品のアップグレードであるかどうかを検出する必要がありますか?

4

3 に答える 3

2

両方のインストーラーで ALLUSERS プロパティが同じに設定されているかどうかを確認します。マージモジュールで同じ問題が発生し、それで解決しました。

于 2011-11-28T14:16:46.847 に答える
1

新しいMSIで古いMSIをアップグレードする場合(およびコンポーネントを削除するためにメジャーアップグレードを使用する必要がある場合)、はい、UpgradeCode要素とUpgrade要素を使用する必要があります(またはWiX v3.5では、新しいMajorUpgrade要素)。

.wxsファイルの内容について詳しく教えていただければ、より具体的にすることができます。

于 2010-08-03T13:18:46.303 に答える
0

プロジェクトは、UpgradeCode と ProductCode を使用して既にアップグレードを検出するように設定されています。例: 以下を使用して .msi をビルドします。

ProductCode="05406C5C-8D66-4779-AECA-A93B18729ED5"  
UpgradeCode="05B87404-548E-4BEA-9621-FBF9459F25B0"  
PackageCode="*"  
Version="1.1.1"  

この .msi には、インストールするファイルとフォルダー、および Microsoft_VC90_CRT_x86.msm マージ モジュールが含まれています。

次に、次のパラメーターを使用して別の .msi を作成します

ProductCode="7F626A0C-5E69-496D-999E-8E2B14C01FE6"  
UpgradeCode="05B87404-548E-4BEA-9621-FBF9459F25B0"  
PackageCode="*"   
Version="1.1.2"  

同じファイル、マージ モジュールがまだ含まれています: 動作し、アプリケーションが更新されます (以前のバージョンがアンインストールされ、新しいバージョンがインストールされます)。Microsoft_VC90_CRT_x86.msm へのすべての参照にコメントした時点で、ビルドされたインストーラーはアプリケーションの以前のバージョンを検出しません。

于 2010-08-03T14:47:48.503 に答える