2

古い (ターゲット イメージ) msi と新しい msi (アップグレード イメージ) を使用して、Advanced Installerでパッチを作成しました。MSP ファイルを調べると、変更されたファイルと完全に新しいファイルの両方が含まれていることがわかりました。問題は、インストール中に「追加された」ファイルのみがインストールされることです。既存のファイルは無視されます。私はすでに次のようなMSIEXECスイッチを試しました:

  • 再インストール=すべて
  • REINSTALLMODE=sumo / aums / omus など...
  • アップグレード="はい"
  • IS_MINOR_UPGRADE = "1"

..異なる順序と組み合わせで (つまり、「REINSTALLMODE=aums REINSTALL=ALL」)、REINSTALLMODE=omus などを試してみるように言って返信したりコメントしたりしないでください。

4

2 に答える 2

1

奇妙な理由で、更新したいすべてのコアコンポーネント(exe、dll)が「このコンポーネントをWindowsインストーラーに登録しない」に設定されていました。これは非常に古く、さまざまなAdvanced Installerバージョン(7、8、および9)を介して移行されたため、これはある種のプロジェクトのバグだと思います。

とにかく、パッチを修正してもアプリケーションを正しく更新できませんでした。Windowsインストーラーは、ターゲットイメージのmsiファイル(以前のバージョンのキャッシュされたインストーラー)を参照するように要求し続けました。

ただし、すべての顧客がこれらのファイルを保持しているわけではありません(通常、このキャッシュされたファイルは%APPDATA%フォルダーに保存されます)。だから私は回避策を見つけました:

  1. MsiFileHashテーブルを作成するために「ハッシュファイル」オプションを適用しました
  2. mspパッチをブートストラッパー(exeファイル)にパックしました。ブートストラッパーは、次のコマンドラインパラメーターを使用してTWICEで開始します。

初めて:

"myPatch.msp" /n {150F6CE2-8C12-414B-9377-F087A62E6B67} REINSTALLMODE=c /qb

2回目:

"myPatch.msp" /n {150F6CE2-8C12-414B-9377-F087A62E6B67} REINSTALLMODE=dep /qb

REINSTALLMODE = cスイッチは、ハッシュに基づいてファイル比較アルゴリズムを強制するため、元のセットアップソースは必要ありません。

REINSTALLMODE = depは、他のすべての欠落ファイル、不明または異なる(ターゲットとは異なる)バージョンのファイルを復元します

この回避策が、AdvancedInstaller以外のMSI/MSPオーサリングツールを使用するユーザーに役立つことを願っています。

于 2012-09-17T12:07:26.010 に答える
1

パッチを作成するときに従う必要のある一連のルールがありますが、それらをチェックしましたか?それらの1つを壊すと、現在発生しているような予期しない動作が発生する可能性があります。

ルールを確認するには、プロジェクトファイル間の差分から始めます。これらは標準のXMLファイルであるため、製品コード、コンポーネントGUIDなどを確認します。たとえば、フォルダーの同期は、パッチが適用されるときに発生する一般的な問題です。コンポーネントのGUIDが変更されるため、作成されます。

于 2012-09-13T06:25:24.663 に答える