私はWiXで作成されたMSIを使用してプロジェクトを継承しましたが、残念ながら既存の問題のいくつかを解決しようとしています。RegSearchの古いプロパティが製品のアップグレードに影響しています
レジストリエントリに保存された特定のディレクトリを発見したために使用されるremember property patternあります:
<Property Id="AUTO_FOUND_DIR" Secure="yes" Admin="yes">
<RegistrySearch Id="regsrch_AUTO_FOUND_DIR"
Root="HKCU"
Key="$(var.RegPath)"
Name="$(var.SpecificKey)"
Type="raw"
/>
</Property>
SpecificKey
値は、AUTO_FOUND_DIR
プロパティに保存されます。
その後、黒い魔法が表示されます。別のコンポーネントが(他のものの中で)ProgramMenuFolder
(広告されていない)のショートカットをメイン実行可能ファイルに保持しています。
util:RemoveFolderEx
の使用量がこのショートカットが孤立して、アンインストール時に削除されていない古い問題の回避策であると言われてきた
:
<Feature>
<DirectoryRef Id="ProgramMenuDir">
<Component Id="cmp_ProgramMenuDir" Guid="{0E8BD13A-GUID-IS-HERE-6E5092ECA9EF}">
<CreateFolder />
<RemoveFolder Id='ProgramMenuDir' On='uninstall' />
<RegistryKey Id='reg_SpecificKeyID' Root='HKCU' Key='$(var.RegPath)' ForceCreateOnInstall="yes">
<RegistryValue Type='string' Name='$(var.SpecificKey)' Value='[ProgramMenuDir]'/>
</RegistryKey>
<!-- other content: shortcut to ProgramMenuFolder and other stuff -->
<util:RemoveFolderEx Id="rm_dirID" On="install" Property="AUTO_FOUND_DIR"/>
</Component>
</DirectoryRef>
</Feature>
問題がある:私は必要はありません。 (メジャー、Product
とPackage
のGUIDが"*"
に設定されている場合、UpgradeCode
の値は以前のバージョンと同じです)MSIの冗長ログにはこれが表示されていますAUTO_FOUND_DIR
が存在する場合、RegistrySearch
は特定のディレクトリでキー値を読み取り、結果としてt彼はutil:RemoveFolderEx
そのディレクトリとそこにあるすべてのコンポーネントを削除します。
私の質問は次のとおりです。アップグレード中にこの古いプロパティが使用されている理由とその除去方法を検出するにはどうすればよいですか?
追加情報:インストールスコープはPerMachine
,ALLUSERS
に設定されています。アップグレードされたバージョンのMSIでは、このプロパティが削除されています。
ありがとうございました。はい、私はアンインストールがアップグレードの一部であるという事実を認識しています。私はあなたの本(感謝!)とMSのドキュメントを読んでいます。このプロパティが導入された製品のバージョンでは、 'RemoveExistingProduct'が' InstallExecute'の後にスケジュールされました。私はこの問題を解決する 'InstallInitialize'の後にこれを変更しましたが、今では多くのCAを再スケジュールする必要があるため、副作用があります。私はより明確にすべきです - アップグレード中に古いバージョンから何とか 'RegistrySearch'をブロックする方法はありますか? – iksajotien