2011-02-08 6 views
1

他の実行中のアプリケーションを閉じる必要がないようにMSIを変更するにはどうすればよいですか?面白いことに、アンインストールが完了する前にアプリケーションを手動で閉じると、Outlook、Firefoxなどを閉じるように要求されません。MSI - アプリケーションを閉じる必要はありません

答えて

2

InstallValidateアクションによってプロンプトが自動的に表示されるため、動作を変更することはできません。代わりに、InstallValidateの前にアプリケーションを閉じるカスタムアクションを使用することで、それを防ぐことができます。

これは通常、WM_CLOSEをメインのアプリケーションウィンドウに送信することによって行われます(アプリケーションがこれを機能させるには、このメッセージを処理する必要があります)。

他のアプリケーション(Outlook、Firefoxなど)も、Windowsインストーラが実行中のアプリケーションを検出するのにあまりよくないため、プロンプトに表示されます。基本的にはファイルの依存関係をチェックします(たとえば、複数のアプリケーションが同じDLLまたはランタイムを使用している場合など)、誤検出が発生する可能性があります。

+0

「アンインストール」のカスタムアクションがありますが、アプリケーションの実行中にプロンプ​​トが表示された後に実行されます...どのように置くべきですか? – Marin

+0

InstallValidateの前に、たとえばCostFinalizeの後に移動する必要があります。アンインストール中にのみREMOVE = "ALL"条件が使用されていることを確認してください。 –

1

MSIは再起動シナリオを使用してロックされたファイルを自動的に処理します。アプリケーションを閉じることは、再起動を防ぐためです。再起動を抑止できますが、再起動するまでファイルは実際には置き換えられません。

あなたが探している動作は、どのようなものですか? InstallValidateとシステム再起動へのリンクをたどってそこから

FilesInUse Dialog

はところで、読書をお勧めします。

+0

実行中のアプリケーションを自動的に無視するか、実行中のアプリケーションを評価する前にアプリケーションを終了したい - カスタムアクションでそれを試してみた@Cosminへのコメント – Marin

+0

私は自分のカスタム設定を番号50でinstallexecutesequnceに入れようとしましたしかし、実行されません。それは条件= 2、それは正しいはずですか? – Marin

+0

無視すると何が起こりますか? –

0

mrnxがここに書いているように、実行中のアプリケーションのチェックは、InstallValidateの間に行われます。 しかし、アプリケーションを停止することをお勧めします。他のチェックが失敗する可能性があり、MSIは実行中のアプリケーションを含むMSIを実行する前の状態にシステムを復旧できなければなりません。

さらに、これらのチェックは「遅延」ではなく「即時」として実行されます。アプリケーションを停止する

IMOカスタムアクションを実行する必要があり、単に「RemoveFiles」を前にして、管理者として実行を確認するために、「を延期」など。ここで、次のプロパティを示すからダイアログを防ぐために

を使用することができます。私の理解で

<Property Id="MSIRESTARTMANAGERCONTROL" Value="Disable" /> 

彼らはまだ使用されなければならない、それはまだRemoveFiles中にバックFilesInUseダイアログに分類されます当時。

関連する問題