セットアップの古いバージョンは、InstallScope = "PerMachine"で作成されました。 新しいバージョンのインストールには、InstallScope = "PerUser"が含まれています。古いバージョンが作成するレジストリキーと同じレジストリキーを使用する必要があります。アップグレード時のレジストリの問題
問題は、アップグレード中にこれらのレジストリキーの下に格納されている値はすべて、古いバージョンによって保存された初期値で最後に上書きされることです。インストールの前に手動でこれらのキーを削除しても、インストールプロセス後にそれらのキーが(間違った値で)再表示されます。
私はカスタムアクションを作成しようとしましたが、これらのキーは特に削除しましたが、結果は同じです。
古いバージョンが新しいバージョンのインストールプロセスを妨げないようにして、古いレジストリキーを削除して再作成できるようにするにはどうすればよいですか?
は正しい結果が得られます新しいバージョンをインストールした直後REPAIRを実行する:私が働いていることが判明何
!
新しいバージョンをインストールする前に古いバージョンを手動でアンインストールしても、キーは削除されませんが、正しい値で上書きできます。
私はあなたがInstallFinalizeの後にトリックのカスタムアクションでメインインストールが完了した後に、自動的に魔法の修復を行うことができると思います。私はそれを試したことはありませんし、それをお勧めしたくないです。最初に私の答えをお読みください。 –
私が前のコメントで言ったように、私は本当にそれをお勧めしたくありませんが、InstallFinalizeの後にカスタムアクションを試すことができます。これは '' msiexec.exe/fum [ProductCode]/qn''です。これで、完了したセットアップの修復が静かに開始されます。テストのために ''/qn''を非サイレントにするために削除する - [msiexec.exeコマンドライン情報](https://msdn.microsoft.com/en-us/library/windows/desktop/aa367988%28v) = vs.85%29.aspx) - ''/f''は指定された製品を修復し、 '' um''はユーザーとマシンのレジストリキーを書き換えます。 –
OK、私は上記のコメントを削除する必要がありますが、私はそれらを今のところ残しておきます。この方法は実行されても動作しますが、UIシーケンスから実行する場合に限ります(つまり、セットアップがサイレントモードでインストールされている場合はまったく動作しません)。不適切な調整に関連する多くのリスクもあります。たとえば、アップグレード中にユーザーデータが予期せずレジストリにリセットされる可能性があります。まったくお勧めしません。代わりに以下の提案を読んで、より安定したソリューションをお試しください。 –