5

このチェーンの Burn バンドルがあります:

<Chain>
  <PackageGroupRef Id="NetFx40Web"/>
  <MsiPackage SourceFile="c:\\My\\Path\\MyMsi.msi"
        Id="MyMsi" DisplayName="MyMsi" DisplayInternalUI="yes" Vital="yes">
    <MsiProperty Name="INSTALLLOCATION" Value="[InstallFolder]" />
  </MsiPackage>
</Chain>

.NETフレームワークと MSI ファイルの両方が正しくインストールされています。ただし、MSI パッケージはアンインストール手順中にアンインストールされません (ブートストラップ EXE をクリックした後、または [プログラムと機能] から)。MSI パッケージを強制的にアンインストールする方法はありますか?

4

2 に答える 2

7

Burn は、各パッケージの変更状態に関する詳細情報を含むログ ファイルを作成します%TEMP%。「計画」というセクションを見ると、バンドル内の各パッケージの行が表示されます。ログ ファイル内の他のメッセージは、MSI がまだ別のバンドルによって参照カウントされているかどうか、またはマシン上の MSI がバンドルが運ぶものよりも新しいかどうかを示します (したがって、アンインストールされません)。

于 2013-03-14T14:38:10.353 に答える
2

バンドルを削除するときに MSI がアンインストールされないという同じ問題が発生しましたが、その理由は非常に単純であることが判明しました。

MSI は同じ Visual Studio ソリューションで作成され、バンドル プロジェクトの依存関係として設定されました。バンドルが作成されるたびに、MSI が最初に作成されました。

アンインストールが行われない根本的な原因は、MSI のプロダクト キーが「*」に設定されていたため、作成されるたびに変更されていたことです。これにより、どういうわけか削除が妨げられました。固定 GUID に設定すると、アンインストールは成功しました。

編集:結局のところ、私は何か特別なことをしました。ドイツ語版と英語版 (light.exe を 2 回呼び出す) を作成し、(いくつかの外部スクリプトを使用して) それらを 1 つの MSI にマージしました。そのため、ドイツ語版は英語版とは異なる製品 ID を持っていました。アンインストールは、どちらの light.exe が最初に呼び出されたかに応じて、ドイツ語または英語の Windows で正しく機能しました。

于 2014-01-09T10:13:11.217 に答える