6

MSIとしてパッケージ化された製品があります。以下で説明するように、顧客が既存のバージョンの上に新しいバージョンの製品をインストールすると、カスタムVBSアクションのためにうまく機能しません。私の質問は、MSIを変更して、上からインストールすると常に既存のバージョンが事前に完全にアンインストールされるようにするにはどうすればよいですか?

詳細は次のとおりです。

さまざまな会社にさまざまなバージョンが展開されている製品があります。年に1回程度、各顧客は私の製品の新しいバージョンを受け取り、会社のワークステーションに展開します。展開の責任者は、インストールパッケージにアンインストール手順を含めるのではなく、古いバージョンの上に新しいバージョンをインストールできることを望んでいます。

msiインストールにより、いくつかのファイルが作成され、[CommonApplicationData]\MyAppフォルダーに書き込まれます。実行中、アプリケーションは[CommonApplicationData]\MyAppフォルダーにさらにファイルを作成します。アンインストール中に、これらのファイルをすべて削除する必要があります。それらはmsiによってインストールされないため、自動的にアンインストールされないため、そのフォルダーとその中の他のすべてを削除するvbsスクリプトを作成しました。そのvbsを実行するコマンドをExecuteDeferredに入れました。

...
RemoveFiles
RemoveFolders
CreateFolders
MoveFiles
InstallFiles
PatchFiles
If REMOVE="ALL" Then
    REM line below is my custom script
    call VBScript From Installation (MyApp_UninstallCleanup)  
End
DuplicateFiles
BindImage
CreateShortcuts
...

これまでのところ良好で、インストールおよびアンインストール時に正常に機能します。ただし、既存のバージョンの上に新しいバージョンの製品をインストールすると、次の順序で発生するように見えます。a)新しいバージョンをインストールし、[CommonApplicationData]\MyAppフォルダーと[ProgramFiles]\にさまざまなファイルを作成します。 MyApp ...、古いバージョンのファイルを上書きするb)vbsを実行し、[CommonApplicationData]\MyAppフォルダーを削除する

新しいMSIのアップグレードテーブルに古いバージョンのGUIDがリストされていますが、このカスタムスクリプトを除けば、アップグレードプロセスは問題なく機能しているようです。

製品自体はかなり小さいので、インストーラーが新しいバージョンをインストールする前に常に以前のバージョンを完全に削除しておけば問題ありません。ワークステーションには保持する必要のあるユーザー設定はなく、ファイルサイズも大きくありません。したがって、簡単にするために、変更されたビットだけで更新するのではなく、以前のバージョンをアンインストールする必要があります。

新しいMSIを変更して、以前のバージョンを最初にアンインストールする方法はありますか?

特に、カスタムvbsを含む既存のバージョンのMSIをインストールしている企業がたくさんあります。したがって、ソリューションは、既存のインストール済みmsiに対応できるソリューションである必要があります。

Wise InstallationExpress7.0を使用してMSIを作成しました。

ありがとう!!

(ここにクロスポスト)

4

2 に答える 2

7

RemoveExistingProductsアクションの前にアクションをスケジュールするInstallInitialize:

この場合、インストーラーは古いアプリケーションを完全に削除してから、新しいアプリケーションをインストールします。再利用されたすべてのファイルを再コピーする必要があるため、これはアクションの非効率的な配置です。

于 2012-07-16T06:31:12.727 に答える
2

シマンテック フォーラムの EdT からの回答

インストールに標準の Wise テンプレートを使用した場合、InstallExecute シーケンスの最後に RemoveExistingProducts アクションがシーケンスされます。技術的にはこれが最も「効率的な」配置ですが、古いパッケージをアップグレードするために新しいパッケージを作成するときに UpgradeSync を非常に慎重に実行しない限り、最終的な結果は通常、ファイルの欠落やその他の異常のいずれかになります。

この修正は、InstallValidate と InstallInitialize の間で実行されるように、RemoveExistingProducts アクションを再度実行することです。これにより、新しいバージョンがインストールされる前に、古いアプリが完全に削除されます。

このアクションを配置するオプションの詳細については、ヘルプ ファイル MSI.CHM で「RemoveExistingProducts」を参照してください。

于 2012-07-16T10:09:33.477 に答える