2

Installshield 2012 で Patch Design を使用して作成された一連のアンインストール可能なパッチが必要です。最初の 2 つのパッチは、アンインストール時に正常に機能します。ただし、3 番目のパッチは、パッチ 1 および/またはパッチ 2 が既に適用されているときにアンインストールされた場合にのみ、エラーが発生します。

MSI (c) (48:C4) [19:02:54:135]: Font created.  Charset: Req=0, Ret=0, Font: Req=MS Shell Dlg, Ret=MS Shell Dlg
Error 1308.Source file not found: {pathToFile}.  Verify that the file exists and that you can access it.

これらのエラーは、さまざまなファイルに関して 26 件あります。ファイルやコンポーネントに明らかなパターンがない、または機能がない

注: パッチ 3 しか適用されていない場合、アンインストールしてもこのエラーは発生しません。

Patch Design で同じオプションを使用して 3 つのパッチすべてを作成しました。私が理解している唯一の顕著な違いは、パッチ 3 には最初の 2 つよりも多くの変更 (ファイルの更新) が含まれていることです。繰り返しますが、さらに多くの変更があります。

私の質問は次のとおりです。

  1. これは、3 番目のパッチ自体ではなく、一連のパッチがインストールされている場合にのみ発生するのはなぜですか?

  2. パッチのアンインストールが、パッチのビルド時に設計時のみの場所からファイルを取得しようとするのを防ぐにはどうすればよいですか? または、これは設計によるフェッチですが、キャッシュが過負荷または混乱している可能性があります..?

更新 - 詳細情報 (Glytzhkof の要請による): パッチには 96 個のファイルの変更が含まれており、これは基本の MSI パッケージの約半分のサイズです。それは実際には「Dev」ブランチの作業から外れています。いくつかの新しいファイルが追加されました。一部は元々削除されていました (実際にパッチを行っていることがわかったときに元に戻す必要がありました...)。これ以上状況を説明すると、その分野の専門家としてあなたを怒らせる可能性があります。

私はメジャー アップグレードを販売しようとしてきましたが、パッチの必要性を時代遅れにするためにインストーラーを少し調整するだけで済みます。製品のアンインストールには、非対話型にするためのパラメーターが必要です (メジャー アップグレード シナリオで機能するには、このパラメーターが必要です。現在、これはアンインストール シーケンスの一部にすぎません)。それが唯一の本当の問題です - しかし、それを修正することはスペードで支払うでしょう. ただし、その問題を修正しないことが決定されました。私はその問題を反復ごとに「バンプ」しようとします。サイコロはありません。メジャー リリースにはパッチが必要だと言われました。ですから、ここで尻尾を振って犬を振ろうとしています。

そして、はい、パッチはより高速になる可能性があります (ここで悪魔の擁護者を演じさせてください)。しかし、実際には、これらのものがとにかく自動的に展開される場合、30 秒と 90 秒の違いはありますか? はい、ファイルのコストを調整してインストーラーを最適化する方法を見つけて、速度が向上するかどうかを確認することも検討しましたが、それでもパッチが要求される別の理由があると確信しています.

別の更新: 1308 エラーで言及されているファイルは、ターゲット システムの%windir%Installer\$PatchCache$\Managed\{PackedProductCodeOfMyBaseMSI??}

フォルダ。このキャッシュからさらにファイルを削除すると、見つからないファイルに対応する同じエラーが発生するため、これにより 1308 が発生する可能性があります。問題は、なぜすべてのファイルがこのPatchCacheフォルダーにないのでしょうか?

4

4 に答える 4

7

これは通常のグッド プラクティスの範囲外であることに同意しますが、解決策または少なくとも何らかのガイダンスを探しています。– jJack 1時間前

展開ツールにアクセスすることはできませんが、視点を提供しようとします。あなたが書いた内容のすべての側面を完全に把握しているわけではないので、一般的なコメントになります。あなたが求めていることと少なくとも何か関係があることを願っています。書いていた通りのブログになりました。

私にとって、MSI パッチは2 つの基本的なシナリオに効果的です。

  1. マイナー アップグレード パッチを使用して、インストール済み製品のアンインストール シーケンスのエラーを修正します
  2. いくつかのファイルのマイナー アップグレード パッチをリリースされた製品の "ホットフィックス" として提供しますが、これはサイズが大きく、再インストールに時間がかかる可能性があります。

これら 2 つの目的のために、私は専門的に MSI パッチを効果的に数回使用しました。いずれの場合も、他に適切な修正はありませんでした。私見のパッチ適用は「ホットフィックス」のためのものです。これは、頻繁な増分更新の展開ではなく、テクノロジー全体が設計されているものです。96 個のファイル アップデートの配信はホットフィックスではありません

パッチは作業中のアップグレードです : パッチ適用は、既に機能しているアップグレードのためのよりコンパクトな配信メカニズムであることを忘れないでください。これは、メジャー、マイナー、または小規模な更新で​​ある可能性があり、それぞれの動作は異なります。他のことを行う前に、パッチとしてパッケージ化する前に、実際の完全なアップグレード MSI をテストしてください。これが私があなたにできる最善のアドバイスです。完全なアップグレードが正しく機能しない場合、パッチ適用に費やされたすべての労力が無駄になります。はい、これには、パッチ自体を作成する前のすべての対話でのインストール、アンインストール、およびアップグレードが含まれます。これは、おそらく最も一般的なパッチ適用の間違いです。

パッチのアンインストールを妨げる障害がいくつか存在します。アンインストール可能なパッチにつながる可能性のある技術的な問題が多数あります(読むことをお勧めします)。ホットフィックスを展開したパッチに欠陥があることが判明し、完全に取り戻さなければならない場合があるため、これは大きな問題になる場合があります。私の見解では、これは小さなパッチの主な用途の 1 つです。ロールバックできるクイック フィックスをデプロイします。

パッチ適用とカスタム アクション条件: 私にとって、パッチ適用の最悪の側面の 1 つは、通常のインストールとは対照的に、パッチ操作が実行されているときに、パッケージ内のカスタム アクションが実行されないように適切に調整されない可能性があることです。パッチには、 PATCHMSIPATCHREMOVEなどのパッチ固有のプロパティがあります。カスタム アクションでこれらの条件を使用して、必要に応じてパッチ中に実行または実行しないようにします。カスタム アクションの条件には注意してください。正しく設定するのは複雑です。 MSI条件チート シートを参考にしてください。私はこれらの条件をテストしていません - テストが唯一の保証です.

さらなるパッチ適用のアドバイス:

  • メジャー アップグレード パッチを完全に忘れてしまいます。私はそれらを試しましたが、もう一度試してみますが、理想的ではない傾向があります. メジャー アップグレード パッチが機能するための絶対要件は、InstallExecuteSequence で InstallFinalize の後に RemoveExistingProducts を配置することです。そうしないと、パッチ パッケージが既存のファイルにパッチを適用しようとする前に、ファイルがアンインストールされるからです。かなりキャッチ22。
  • マイナー アップグレードでは、既存のインストールはアンインストールされませんが、評価者は新しい MSI ファイルを再キャッシュして、メンテナンスおよびアンインストール操作に使用します。これは、パッチを実行する前にアンインストール シーケンスを修正できることを意味します。実際、マイナー アップグレードが機能する場合、パッチはまったく必要ない場合があります。MSI ファイルが非常に大きく、小規模な「修正プログラム」を提供したい場合を除き、マイナー アップグレードを使用してください。
  • パッチにファイルを含める必要がある場合は、「ファイル全体を含める」を有効にすることをお勧めします。それ以外の場合は、ビットレベルのパッチ適用が行われ、これは不必要に複雑になります (バイナリが巨大でない限り)。また、ビットレベルのパッチが署名付きファイルとデジタル署名でどのように機能するかもわかりません。
  • 必要なものだけをパッチに含めます。不要なファイルや設定を追加せず、信頼できるパッチを作成できます。可能であれば、カスタム アクションを追加しないでください。
  • 既に述べたように、パッチは通常のインストールと同じ InstallExecuteSequence を使用することに注意してください。ただし、カスタム アクションは、PATCHMSIPATCHREMOVEなどのパッチ固有のプロパティを使用して、異なる方法で条件付けできます。カスタム アクションでこれらの条件を使用して、必要に応じてパッチ中に実行または実行しないようにします。
  • コンポーネントの参照は、どのタイプのパッチでも機能するために 100% 正確でなければなりません。例外なく。
  • マイナー アップグレード パッチは、setup.exe / update.exe 経由で配信されない限り、適切な msiexec.exe コマンド ラインで実行する必要があります。
  • 私の経験では、サードパーティのマージ モジュールが原因でパッチの問題が頻繁に発生します。
  • 彼らが言うように「バージョン嘘」 - ディスク上のファイルの MSI ファイルに異なるバージョンを追加することにより、ファイルが常に更新されるようにする黒魔術は、パッチ エラーを引き起こすようです。
  • パッチは、メイン インストールと同じ GUI を表示します。私の意見では、これは誤った設計です。GUI のカスタム アクションは、パッチ適用プロセスを台無しにする可能性があります (パッチの値に対して新しいユーザー入力を受け入れる必要がありますか?)。
  • 各パッチは累積的であるべきだと思います - 以前のパッチをすべて置き換えます。連続して順番にインストールされたいくつかのパッチをテストしたとき、これが正しく機能することはありませんでした。私は、多くの理由から、これはそもそも無駄なパッチ適用アプローチであると結論付けました。パッチファミリー、ターゲットリリースなどであなたが説明したとおりに問題がありました...パッチはあまりスマートではありません。それが属する製品を見つけようとするいくつかのファイルの複雑なバンドルです。

結論として明らかなことは、たとえ要求されたとしても、このパッチ適用アプローチを使用することは実際にはお勧めしないということです。ただし、Installshield の代わりに WIX を使用するように切り替えた人へのパッチ適用が成功したことを示しているように思われるこのスレッドを読みました。CodeProject のリンクもチェックしてください。

あなたの展開シナリオについては、私はそのすべての側面を完全に把握しているわけではありませんが、開発者は、パッチを介してライブ アプリケーションを現在の QA バージョンに変換するためのパッチを望んでいるようです? 私はこれに同意することは決してありません。そうしないと、シナリオは見た目とは異なるに違いありません。そもそもマイナー アップグレードまたはメジャー アップグレードを提供しなければならない場合、パッチを作成する労力はまったく無駄です。QA 用のソフトウェアを提供するには十分すぎるほどです。dev-branch を使用して個別の MSI を提供し、製品にパッチが適用可能であることをテストするために時々いくつかのパッチを作成することもできますが、パッチを使用して製品のインストーラーを内部に提供することは決してありません。それがあなたに求められていることかどうかはわかりません。

マイナー アップグレードとメジャー アップグレードを行います。できればパッチ以外の場合は後者を使用し、本当に必要なときにパッチを提供します。インストール時間が問題になる場合は、すべての開発者および QA PC でナイトリー ビルドが完了した後に、メジャー アップグレードを毎日スケジュールすることはできますか? (インストールを機能させるために必要な実行中のプロセスを強制終了することを含む)。あなたのシナリオが実際に何であるかについて、私が完全に軌道から外れているかどうかはわかりません。

アップグレードとパッチ適用のヒントについては、 Stefan Kruger のinstallsite.orgを確認してください。

アップグレードとパッチについては、このよく知られた Wix チュートリアルをご覧ください。そしてMSDN

于 2014-05-03T23:15:13.487 に答える
2

コメントするには長すぎるため、これを回答として追加する必要があります。200回のファイル変更?ファイルのコストは、マイナー アップグレード全体をインストールするよりも時間がかかると思います。私があなたなら、この種のパッチの提供を拒否します。技術が複雑なため、ほぼ 100% 確実に失敗します。MSI パッチは、基本的にリスクと複雑さが追加された、既に機能しているアップグレードの配信メカニズムにすぎないことを忘れないでください。これは本当にそうです。

MSI パッチは複雑で、検査とアンインストールのために登録されます。MSI 以前の世界のようにファイルをダンプしてパッチを当てるだけではありません。ユーザーがパッチ適用を要求する場合、MSI とはまったく別のソリューションを使用します。

シナリオをもう少しうまく説明できますか?メジャー アップグレードを提供する自動化されたビルド プロセスは、毎日のビルドを QA に提供するのに非常にうまく機能することがわかりました。インストール速度が問題になる場合は、MSIFASTINSTALLを有効にするなどの手法を使用して高速化できます。このプロパティを使用すると、システムの復元ポイントの作成や完全なファイル コスト計算 (インストール済みおよびインストール済みのファイルとディレクトリのサイズの比較) など、重くて時間のかからない操作を実行するようにシステムに指示できます。

于 2014-05-03T14:12:20.560 に答える