1

製品をインストールする MSI インストーラーがあり、この製品には広く使用されている API dll がいくつか含まれています。これらの dll は、アップグレード中に制御できないプロセスに読み込まれる可能性があります (たとえば、explorer.exe または svchost を閉じるようにユーザーに要求することはできません)。そのため、MSI のアップグレード中にこれらの dll はロックされ、再起動しないとアップグレードできません。再起動せずにアップグレードできるようにする必要があります。これらの API dll は非常に安定しており、これらの dll の新しいバージョンが新しい実行中のプロセスにロードされるときに、古いコピーを古いプロセスで動作させたままにしても問題ありません。したがって、MSI を使用しなかったときは、標準的なトリックを使用しました。ファイルの名前を変更し、再起動時に削除するようにマークし、新しいファイルを書き込みます。

MSIでそれを行う最良の方法は何ですか? この標準的なトリックを実行するカスタム アクションを作成する必要がありますか? それとも、MSI にはそれを行うためのより良い方法がありますか?

ありがとうございました!

4

1 に答える 1

2

プロセスは使用中のため「ロック」されており、実行中の実行可能ファイルを変更することはできません。「ロック解除」はありませんが、ファイルの使用を停止します。したがって、プロセスを今すぐ強制終了するか、再起動後に PendingFileRename キーを使用してファイルを変更します...

おそらく、explorer.exe などが (カスタム アクションを使用して) DLL を保持する必要があるハンドル/スレッドを強制終了しようとすることができます。これは、1 分間は機能する可能性があります...再起動するまで機能しません。また、(b) ユーザーのコンピューターを不安定にした可能性があり、Explorer はいつでもクラッシュする可能性があります。いずれにせよ、エンド ユーザーはあなたのソフトウェアに満足することはありません。

于 2010-09-07T21:30:30.950 に答える