9

Windows-Installer と Wix について学んでいますが、その仕組みについていくつか質問があります。

  1. コンポーネント GUID が変更されたが、同じファイルがコンポーネント内にある場合、メジャー アップグレードではどうなりますか? ファイルは置き換えられますか?
  2. コンポーネントが製品から削除された場合、メジャー アップグレードで関連ファイルはどうなりますか? アンインストール時に元のファイルは削除されますか?
  3. ファイルのアセンブリ バージョンが変更されたかどうかに関係なく、メジャー アップグレードではすべてのコンポーネントのすべてのファイルが置き換えられ、小さな更新やマイナー アップグレードでは、GUID が同じ場合にのみファイルが置き換えられるというのは正しいですか。ファイルのアセンブリ バージョンはインクリメントされていますか? aspx ページのように、ファイルにアセンブリ バージョンがない場合はどうなりますか?
  4. インストーラーを使用せずに製品がマシンにデプロイされたとします。次に、インストールされたディレクトリにあるものと同じ名前のファイルをコンポーネントに含むインストーラーを作成した場合、インストールを試みた場合、それらのファイルはどうなりますか? それらは交換されていますか?
  5. heat のようなツールを使用してディレクトリ内のすべてのファイルを含む xml ファイルを作成した場合 (Web サイト用など)、GUID を同じに保つ必要がある (手動またはスクリプトを使用) というのは正しいですか? 、またはメジャー アップグレードしかできないでしょうか。
4

2 に答える 2

4

コンポーネント GUID が変更されたが、同じファイルがコンポーネント内にある場合、メジャー アップグレードではどうなりますか?

まず、問題は古いコンポーネントがアンインストールされるかどうかです。製品の以前のバージョンをアンインストールするようにアップグレードを構成しない場合、コンポーネントは削除されません (ただし、そのファイルは上書きされる可能性があります)。質問 2 への回答も参照してください。

次に、問題は新しいコンポーネントがインストールされるかどうかです。コンポーネントは、そのキーパスが欠落している場合にのみインストールされます。キーパスがバージョン管理されたファイルである場合、より低いバージョンも「欠落」としてカウントされます。

最後に、新しいコンポーネントがインストール用にマークされていて、Windows インストーラーがインストールしようとしているファイルと同じ名前のファイルを検出した場合、ファイルのバージョン管理規則によって、ファイルが置き換えられるかどうかが決定されます。たとえば、より高いバージョンのファイルはダウングレードされません。

コンポーネントが製品から削除された場合、メジャー アップグレードで関連ファイルはどうなりますか? アンインストール時に元のファイルは削除されますか?

Upgrade テーブルと、Windows インストーラーに古い製品を削除するように指示する InstallExecuteSequenceに適切なエントリを配置しない限り、古いコンポーネントは放置されます。古いバージョンを削除する wix でインストーラーを作成する方法については、Alex Shevchuk によるこのブログ投稿を参照してください。

メジャー アップグレードでは、すべてのコンポーネントのすべてのファイルが置き換えられるというのは正しいでしょうか...

いいえ。古いコンポーネントが最初に削除されたかどうか、キーパスに応じて新しいコンポーネントがインストールされたかどうか、およびファイルのバージョン管理規則によって異なります。

インストーラーを使用せずに製品がマシンにデプロイされたとします。次に、インストールされたディレクトリにあるものと同じ名前のファイルをコンポーネントに含むインストーラーを作成した場合、インストールを試みた場合、それらのファイルはどうなりますか?

繰り返しますが、キーパスとファイルのバージョン管理規則に応じて、コンポーネントがインストールされるかどうかによって異なります。

heat のようなツールを使用して (Web サイトのように) ディレクトリ内のすべてのファイルを含む xml ファイルを作成した場合、GUID を同じ (手動またはスクリプトを使用) に保つ必要があると言うのは正しいですか? 、またはメジャー アップグレードしかできないでしょうか。

正しい。GUID はコンポーネントの ID であるため、GUID を変更すると、同じリソースを同じターゲットの場所にインストールする 2 つのコンポーネントが (製品の古いバージョンと新しいバージョンに) 存在することになります。そして、MSDN によると、「同じ名前とターゲットの場所でリソースをインストールする 2 つのコンポーネントを作成しないでください。」

于 2009-11-18T22:50:43.237 に答える
3

コンポーネントのルールを学びます。それらは非常に壊れやすく、Windows インストーラーはそれらを強制しません。ただし、ルールを守らないと、奇妙な奇妙なブードゥーが発生します。

簡単な解決策です。コンポーネントごとに 1 つのファイルに固執しheat、コンパイル時の GUID 生成を使用します (出力Guid="*"は安定したアルゴリズムを使用し、ランダムではありません)。熱生成 GUID はランダムですがcandle、コンパイル時に生成される GUID は安定しています (ファイル名 + パス ハッシュまたはメモリからの何かに基づいて)。

Windows インストーラーがインストール中に既にディスク上にファイルを見つけた場合、そのファイルが「共有」ファイルであると想定して、そのファイルの参照カウントを増やします。ファイルは、参照カウントがゼロに戻った場合にのみディスクから削除されるため、ファイルが既に存在する場合、カウントがゼロに戻らない可能性があり、アンインストール後もファイルが残っている可能性があります。

于 2009-11-18T22:57:59.507 に答える