Объявление WiX: RemoveFile удаляет файлы только при установке

#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, и это тоже не сработало.