2012-04-04 11 views
1

私が見つけたコードに基づいてインストーラを作成しましたhere。以前のバージョンのアプリケーションが存在する場合は、新しいバージョンをインストールする前にインストーラで削除する必要があります。WiXのメジャーアップグレードでは、起動するまでインストールが完了しません

クリーンインストールの場合は、すべてうまくいきます。

アップグレードの場合、奇妙なことが起こります。予想どおり、古いバージョンは削除され、レジストリは変更され、ショートカットがデスクトップに配置されます。奇妙なことに、インストーラの完了時に、アプリケーションフォルダにプライマリファイルが存在しません。

アップグレード後に起動すると、小さなインストーラのメッセージボックスがポップアップし、「Windowsが設定中にお待ちください」というメッセージが表示されます。このクイックメッセージの後、ファイルはアプリフォルダ内にあるはずであり、アプリが起動します。

ただし、起動する前に、それはありません。私はアプリを起動する前にリブートを試みて、それが何らかの種類のキャッシュに詰まっているとファイルを配置するかどうかを確認していました。

誰でもこの現象が見られますか? this questiomのようなビットですが、すべてのアップグレードで発生します。

答えて

1

奇妙なことに、偶然、インストーラが完了すると、アプリケーションフォルダにプライマリファイルが存在しません。

これは、コンポーネントが正しく管理されていない場合、Windowsインストーラのアップグレードでよく発生する問題です。通常、インストーラをコントロールパネルからメンテナンスモードにして「修復」を行うと、見つからないファイルが再度表示されます。この場合、起動したときのwindows repaired the application automatically

私の頭の上のいくつかの可能な説明は:

  1. あなたのインストーラの新しいバージョンは、新しいGUIDを持つコンポーネントでこのファイルをインストールします。コンポーネントのGUIDが安定している必要があるため、この問題が発生します。

  2. インストーラは、コンポーネントごとに複数のファイルをインストールします。コンポーネントをインストールするかどうかはkeypathによって決まり、1つのファイルのみがキーパスになる可能性があるため、問題が発生します。 Stick to one file per component

  3. ファイルの「新しいバージョン」のバージョン番号は実際には低くなります。このような「アップグレード」doesn't work correctly

+0

可能な説明のうち、最初のシナリオは私のシナリオに合っています。元のアプリのコンポーネントGUIDが見つかるかどうかを確認します。私ができない場合、インストール時にファイルを強制的に削除する方法はありますか? – Tony

+0

@トニー:それはわかりません。この問題は、ファイルがインストールされていないだけでなく、インストールプロセスの最後に古いバージョンの製品が削除されたときに*アンインストールされます。 GUIDを変更すると、コンポーネント参照カウントメカニズムが壊れます。 –

+0

私は、古いコンポーネントのGUIDをプライマリファイルに再利用しようとしましたが、問題はまだ存在します。今回は、インストーラも再起動を強制しました。私は古いインストーラがその1つのコンポーネントエントリの下にすべてのファイルを持っていたことに気づいた。 – Tony

関連する問題