Каталог xx находится в профиле пользователя, но не указан в таблице RemoveFile.
Когда я пытаюсь создать установщик, я получаю следующую ошибку:
Каталог ProgramMenuDir находится в профиле пользователя, но не указан в таблице RemoveFile.
Как решить эту проблему?
ниже - структура каталогов, которые я использую.
<Directory Id="ProgramMenuFolder" Name="Programs">
<Directory Id="ProgramMenuDir" Name="E">
<Directory Id="Monarch" Name="Monarch">
<Component Id="Monarch" Guid="E510F3DA-82AA-11DF-8814-8970DFD72085">
<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>
Ответы
Ответ 1
Насколько я вижу, проблема заключается в использовании элемента <RemoveFolder/>
. Если атрибут "Каталог" опущен, он принимает каталог родительского компонента. В вашем случае это каталог с Id = "EFIMonarch". Это объясняет, почему вы получаете предупреждение для внешнего каталога (ProgramMenuDir), но не получаете его для каталога EFIMonarch.
Попробуйте заменить:
<RemoveFolder Id='ProgramMenuDir' On='uninstall' />
с
<RemoveFolder Id='RemoveProgramMenuDir' Directory='ProgramMenuDir' On='uninstall' />
Кроме того, это хорошая идея быть явной для каждого элемента RemoveFolder.
Надеюсь, что это поможет.
Ответ 2
Просто напишите это для некоторых других, которые могут по-прежнему испытывать эту проблему даже после ответа на этот вопрос.
У меня была та же проблема, и даже после явного указания Directory в RemoveFolder мне не помогло, я попытался поместить этот DirectoryRef, содержащий ярлык, установить/удалить somponents сразу после TARGETDIR внутри того же фрагмента, и это помогло исправить мои проблема.