Windows XP以降を対象とする製品をWindowsインストーラ(WI)を使用してインストールするためのセットアップを作成しました。結果の.msiファイルには、製品コード、PC1(実際にはGUID)、アップグレードコードUC1(GUID)があります。しばらくすると、新しいバージョンの製品をインストールするための新しいセットアップが作成されました。新しい.msiファイルには、新しい製品コードPC2と同じアップグレードコードUC1(メジャーアップグレードとも呼ばれます)があります。私の会社は私たち自身のインストーラで.msiファイルをインストールしたいと思っています。そのためには、基本的にMsiInstallProductを使用して.msiファイルをインストールしますが、UI全体は独自のインストールプログラムに含まれています(MsiSetExternalUIを使用してWIに通知を送信するよう依頼しています)。私が午前問題は以下の通りです:MsiSetExternalUIを使用している場合、Add/RemoveProgramsコントロールパネルに重複した項目が表示される
2は、製品のビルドならば「msiexecの/ I myapp.msi」だけで一つのエントリが存在します「追加使用して、同じマシンにインストールされています「プログラムと機能」のコントロールパネルアプレットの「プログラムの削除」をクリックします。つまり、新しいビルドのインストール中に、古いビルドがアンインストールされます。
MsiInstallProductを使用してプログラムで同じマシンに2つのビルドをインストールすると、コントロールパネルに2つの異なるエントリが表示されます。
もう一度、私は(MsiOpenPackage + MsiDoActionまたはMsiInstallProductのいずれかを使用して)プログラム的にそれをインストールしようとする場合にのみ、アップグレードは発生しませんし、私は、コントロールパネルの2つのエントリで終わります。また、MsiInstallProductまたはMsiDoActionを呼び出す前にMsiSetExternalUIを使用して外部UIコールバックを設定しないと、新しいインストールのアップグレード部分も期待通りに機能し、CPに重複エントリは存在しないことがわかりました。
私はMsiSetExternalUIに使用するコールバックは基本的には、このMSDNの記事のものと同じである: http://msdn.microsoft.com/en-us/library/windows/desktop/aa368786(v=vs.85).aspx
私は何ができるか(または私は私のコールバックで処理するために必要なもの)の重複/複数のを避けるためにコントロールパネルのエントリ?
おかげで、よろしく、
レベンテ上記の私たちのコメントを再
失敗したシナリオでインストーラをログに記録すると、FindRelatedProductsは何を報告しますか?あなたのALLUSERSの習慣は何に設定されていますか? (たとえば、ユーザーごとのインストールでは、マシンごとのインストールを大規模にアップグレードすることはできません。) –
管理ユーザーとして実行しています。製品はすべてのためにインストールされています。 ALLUSERS = 2ですが、私はこれを手動で設定しません。通知INSTALLMESSAGE_ACTIONSTARTとINSTALLMESSAGE_INFO私はIDOKを返すことによってのみ処理します。 – Levy
これをログに記録します:.... INSTALLMESSAGE_INFO:アクション開始3:40:02:FindRelatedProducts。
INSTALLMESSAGE_ACTIONDATA:見つかったアプリケーション:{85144A07-AECF-4842-A9C4-9EBAFED473B7} – Levy