1

WiX で構築された MSI の 1 つのダウングレード機能をテストしているときに、奇妙なことに気付きました。

MajorUpgrade要素のダウングレードを許可し、その要素をafterInstallInitializeにスケジュールしました (ただし、 afterInstallValidateで徹底的に試しましたが、同じ問題が発生しました。そのアクションの後にはできませんが、テストしようと思いましたそれ)。

多くのファイル (サービスの bin フォルダー内の DLL など) は、リリースごとに新しいバージョンになっています。したがって、ダウングレード先のバージョンには、下位バージョンのファイルが含まれています。ただし、これらのファイルはすべて、サービス EXE ファイルを除いて、ダウングレード中に正常にインストールされます。さらに、サービスは Windows にもインストールされません。

上記のすべてを考慮すると、この問題に 2 日間を費やし、多くの検索を行った後、私は途方に暮れているようです。

私はいくつかの希望を提供すると思われる2つのことを試しました:

1) REINSTALLMODEプロパティをamusに設定しようとしました。これにより、Windows サービスと共に EXE ファイルが確実にインストールされます。しかし、そのプロパティについて私が読んだほとんどのことは、それを使用することに対して警告しており、そのプロパティを設定するときに、パッケージをビルドするためにICE40を抑制する必要さえあります。MSI ファイルでこのプロパティを使用すると、どのような悪影響を見逃す可能性があるのか​​ わからないため、これはすべて私にとって懸念事項です。

2)サービス EXE ファイルをマークアップするFile要素からKeyPath属性を削除し、代わりにその属性をComponent要素に配置すると、ダウングレード中にサービス EXE ファイルがシステムにインストールされますが、サービスはまだインストールされません。ウィンドウズ。これを調べたところ、サービスをインストールしたい場合は、 KeyPath属性がFile要素にある必要があるようです。ですから、この考えは役に立たないように思えます。

ヘルプやアドバイスをいただければ幸いです。ダウングレード機能を提供することで本当にできることがあります。

ありがとうございました。

4

3 に答える 3

0

私の解決策は、Burn を使用して、カスタム ブートストラップ アプリケーションを使用して「ダウングレード」機能を提供することでした。

ブートストラップは、新しいバージョンを検出してダウンロードし、インストールします。ダウングレードの場合、インストールの前にアンインストールを実行します。ただし、アンインストールするには、現在インストールされているバージョンのブートストラップを実行する必要があります。

また、アンインストールの結果として削除される状態についても考慮する必要があります。これは、アップグレード中と同じ方法で保持する必要があります。

于 2015-09-01T00:29:28.920 に答える
0

MSI は基本的に格下げの考え方に反対しています。ファイルがマシン上に置かれると、MSI はファイルの最新バージョンを維持するために非常に努力します。これは、ファイルをダウングレードすると、セキュリティ上の脆弱性が再び発生する可能性があるためです。ダウングレードを直接サポートしないことをお勧めします。代わりに、上位バージョンを最初にアンインストールするようユーザーに伝えるメッセージを表示できます。

于 2012-09-13T17:34:51.680 に答える