2017-08-18 8 views
1

私は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> 

問題がある:私は必要はありません。 (メジャー、ProductPackageのGUIDが"*"に設定されている場合、UpgradeCodeの値は以前のバージョンと同じです)MSIの冗長ログにはこれが表示されていますAUTO_FOUND_DIRが存在する場合、RegistrySearchは特定のディレクトリでキー値を読み取り、結果としてt彼はutil:RemoveFolderExそのディレクトリとそこにあるすべてのコンポーネントを削除します。

私の質問は次のとおりです。アップグレード中にこの古いプロパティが使用されている理由とその除去方法を検出するにはどうすればよいですか?

追加情報:インストールスコープはPerMachine,ALLUSERSに設定されています。アップグレードされたバージョンのMSIでは、このプロパティが削除されています。

答えて

1

最新の詳細なログを見て、何が起きているのかを確認することなく、アップグレードすると古いインストール済み製品がアンインストールされます。これは、古いインストールされた製品の多くのロジックがアップグレード中に発生することを意味します。したがって、古い製品がアンインストールされ、AUTO_FOUND_DIRが設定されているため、レジストリ検索が確実に実行され、アンインストール中に実行されるRemoveFolderが表示されます。

あなたが見ているすべてのものがアンインストールされている古い製品のアンインストールアクティビティである場合は、実際に問題があるかどうかは不明です。その活動は、インストールされた製品に組み込まれています。

+0

ありがとうございました。はい、私はアンインストールがアップグレードの一部であるという事実を認識しています。私はあなたの本(感謝!)とMSのドキュメントを読んでいます。このプロパティが導入された製品のバージョンでは、 'RemoveExistingProduct'が' InstallExecute'の後にスケジュールされました。私はこの問題を解決する 'InstallInitialize'の後にこれを変更しましたが、今では多くのCAを再スケジュールする必要があるため、副作用があります。私はより明確にすべきです - アップグレード中に古いバージョンから何とか 'RegistrySearch'をブロックする方法はありますか? – iksajotien

関連する問題