0

レガシー バージョンのソフトウェアからアップグレードするときに、InstallShield .MSI がレジストリ値を作成しないという問題があります。レガシ ソフトウェアはHKLM\\Software\Company\Appname、いくつかの値を持つキーを作成しました。Path最新のソフトウェアでは、同じキーに新しい値を追加したいと考えています (ただし、従来の値は保持します)。キー自体が既に存在する場合、インストーラーは新しい値を作成しようとはしません。InstallShield サラウンドで公開されている唯一のオプションは、アンインストール動作のさまざまなオプションと共に、「存在しない場合はキーを作成する」です。「キーが既に存在する場合でも、この値を作成する」という方法はないようです。

キーが既に存在する場合でも、レジストリ値エントリを作成する方法を知っている人はいますか? アンインストールして削除することを除いて、InstallScript ソリューションは気にしません。

4

2 に答える 2

0

さらなる調査の後、興味深いことが実際に起こっていました。MSI のログからWriteRegistryValues、インストールの途中でアクションが実行され、最後にアクションが実行されていることがわかりRemoveRegistryValuesました。結局のところ、これはRemoveExistingProductsアクションが終わりに近く、インストールのファイナライズの直前だったことが原因でした。InstallValidate代わりに、そのアクションをとアクションの間の上部近くに移動しましたInstallInitialize。これにより、最初に従来のアンインストールが実行され、その後、正しいレジストリ設定がインストールされました。従来のアンインストーラーがキー全体を削除するように要求したと思います。

この問題に遭遇した他の人にとって、このソリューションにはいくつかの欠点があります。これは、古い製品コードとして宣言されているものはすべて削除されることを意味し、一部の設定が上書きされ、ファイルが書き直される可能性があります。しかし、私たちにとって、この欠点は、レジストリが正しい状態で存在しないという代替案よりも優れています。

ログを確認する前に質問を開いたことをお詫びしますが、他の誰かがこの解決策から恩恵を受けることを願っています.

于 2013-04-16T19:51:09.743 に答える