インストーラーを作成しようとすると、次のエラーが発生します。
ディレクトリProgramMenuDir
はユーザープロファイルにありますが、RemoveFile
テーブルにはリストされていません。
この問題を解決するにはどうすればよいですか?以下は私が使用しているディレクトリ構造です:
<Directory Id="ProgramMenuFolder" Name="Programs">
<Directory Id="ProgramMenuDir" Name="E">
<Directory Id="Monarch" Name="Monarch">
<Component Id="Monarch" Guid="*">
<RemoveFolder Id='Monarch' On='uninstall' />
<RemoveFolder Id='ProgramMenuDir' On='uninstall' />
<RegistryValue Root='HKCU' Key='Software\[Manufacturer]\[ProductName]'
Type='string' Value='' KeyPath='yes' />
</Component>
</Directory>
</Directory>
</Directory>
私の知る限り、問題は<RemoveFolder/>
要素の使用にあります。 「ディレクトリ」属性を省略した場合は、親コンポーネントのディレクトリを取得します。あなたの場合、それはId = "EFIMonarch"のディレクトリです。これは、外部ディレクトリ(ProgramMenuDir)の警告が表示されるが、EFIMonarchディレクトリの警告は表示されない理由を説明しています。
交換してみてください:
<RemoveFolder Id='ProgramMenuDir' On='uninstall' />
と
<RemoveFolder Id='RemoveProgramMenuDir' Directory='ProgramMenuDir' On='uninstall' />
また、すべてのRemoveFolder要素を明示することをお勧めします。
お役に立てれば。
この質問の回答に従っても、この問題がまだ発生する可能性のある他の人のためにこれを書いてください。
同じ問題があり、RemoveFolderでDirectoryを明示的に指定しても役に立たなかった場合でも、同じフラグメント内のTARGETDIRの直後にショートカットのインストール/アンインストールコンポーネントを含むこのDirectoryRefを配置しようとしたため、問題が解決しました。