#wix
#wix
Вопрос:
У меня есть следующий фрагмент кода в моем файле wxs. Независимо от того, устанавливаю ли я атрибут On для обоих или удаляю, он не удаляет файлы с расширением trace из папки Trace. Он отлично работает только при установке. Если я изменю только атрибут On на both или install, он будет работать при установке, но никогда не будет работать в процессе удаления, будь то оба или удаление.
<Directory Id="TRACEDIR" Name="Trace">
<Component Id="Trace" Guid="*" KeyPath="yes">
<RemoveFile Id="RemTraceFiles" On="both" Name="*.trace"/>
</Component>
</Directory>
Какие-нибудь идеи, пожалуйста?
Я не создавал еще одну ошибку для следующего вопроса, скорее, я добавил ее ниже, поскольку я считаю, что она может иметь какое-то отношение к вышеупомянутому. Это может быть одной и той же причиной сбоя в обоих случаях. Итак, мой второй вопрос касается следующего сценария в том же файле, однако на этот раз это удаление папки, а не просто удаление файла. Предположим, у нас есть:
<Property Id="LOGDIREX">
<DirectorySearch Id="CheckLogDir" Path="[INSTALLDIR]Log" Depth="1" AssignToProperty="yes" />
</Property>
...
<Directory Id="LOGDIR" Name="Log">
<Component Id="Log" Guid="01978736-614F-46C1-88FA-056284510164">
<!--RemoveFolder Id='LogFolder' On='both' /-->
<RegistryValue Root='HKCU' Key='Software[Manufacturer]FoobarLog' Type='string' Value='' KeyPath='yes' />
<utilExt:RemoveFolderEx Id='LogFolder' On='both' Property='LOGDIREX'/>
</Component>
</Directory>
Итак, в этом примере, если я использую объявление тега RemoveFolderEx библиотеки UtilExtension, папка журнала в моем каталоге установки удаляется как при установке, так и при удалении. , процессы. Но если я прокомментирую объявление RemoveFolderEx и раскомментирую, чтобы использовать обычный Wix RemoveFolder, как указано прямо над объявлением RemoveFolderEx, то это не приведет к удалению папки журнала ни при установке, ни в процессе удаления.
Есть идеи?
И просто чтобы упомянуть, что оба объявления каталогов, TRACEDIR и LOGDIR, в этом вопросе объявляются в INSTALLDIR, который является некоторым каталогом для моего приложения.
Ответ №1:
TRACEDIR — это настраиваемое свойство, и я предполагаю, что вы считаете, что значения свойств каким-то образом сохраняются между установкой и удалением, но это не так. Это означает, что вам нужно сохранить и восстановить значение TRACEDIR , и шаблон WiX «Запомнить свойство», вероятно, то, что вам нужно.
http://robmensching.com/blog/posts/2010/5/2/the-wix-toolsets-remember-property-pattern/
Также обратите внимание, что поиск directorysearch для INSTALLDIR, скорее всего, завершится неудачей, поскольку этот поиск выполняется на очень ранней стадии установки, и неясно, имеет ли INSTALLDIR допустимое значение.
Кроме того, вы можете создать подробный журнал удаления, чтобы увидеть, где устанавливается (или нет) ваше свойство, используя политику ведения системного журнала, или:
msiexec /x {productcode} /L*VX [путь к файлу журнала]
также должно работать.
Комментарии:
1. Я переименовал TRACEDIR в MYTRACEDIR — то же поведение.
2. Я не уверен, почему изменение имени имеет значение. Вы использовали шаблон «запомнить свойство» для свойств, которые вам нужны во время удаления /?
3. Я неправильно понял, я думал, вы говорили, что TRACEDIR — это специальное ключевое имя для Wix, такое как TARGETDIR , поэтому я переименовал его. В любом случае, я последовал вашему совету и объявил свойство REMEMBERME, как указано в предоставленной вами ссылке. Я использовал это в своем объявлении RegistryValue вместе с моим объявлением RemoveFolder для компонента LOGDIR. Это не сработало. Я немного скептически относился к тестированию его и для TRACEDIR, поскольку он содержит объявление RemoveFile, а не RemoveFolder, как это делает LOGDIR. Однако я протестировал его с помощью TRACEDIR, и это тоже не сработало.