WiX: При uninstall не удаляет каталог прог. из-за orphaned
От: amihal  
Дата: 11.01.08 10:57
Оценка:
Добрый день!

Есть проблема с MSI/WiX. Есть программа, структура ее каталогов следующая:
".\Program Files\PROG\" — каталог программы, создается инсталлятором
".\Program Files\PROG\DATA\" — каталог с данными, создается только программой, должен удаляться инсталлятором при удалении программы
(*** Я в курсе, что для данных существует APPDATA, что не хорошо писать данные в подкаталоги "Program Files", но это программа для системных администраторов).

Проблема в следующем. Написал xml для WiX, который удаляет orphaned files в каталоге DATA и удаляет сам этот каталог. Но, похоже, удаление этих файлов и каталога DATA происходит по времени уже ПОСЛЕ того, как сам инсталлятор (msi) пытался удалить каталог программы. Как итог этого: каталог самой программы инсталлятор, конечно, удалить не смог, так как в нем еще был подкаталог DATA. Подкаталог DATA позже удалился моими стараниями. Но удалять каталог программы больше никто не пытается. Как поменять (и нужно ли) порядок удаления? Чтобы orphaned files удалялись ДО того момента, как инсталлятор начинает удалять проинсталлированные им файлы и каталоги.

Код для WiX:
<Directory Id="TARGETDIR" Name="SourceDir">
  <?include $(var.COMMONDIR)\toolkit.wxi?>
  <Directory Id="ProgramMenuFolder" Name="PMenu">
    <Directory Id="ProgramsCompanyName" Name="$(var.COMPANY_DIR_SHORT)" LongName="$(var.COMPANY_DIR)" />
  </Directory>
  <Directory Id="ProgramFilesFolder" Name="PFiles">
    <Directory Id="CompanyDir" Name="$(var.COMPANY_DIR_SHORT)" LongName="$(var.COMPANY_DIR)">
      <Directory Id="INSTALLDIR" Name="$(var.PROG_PROG_DIR)">
        <?include $(var.COMMONDIR)\ms_libs1.wxi?>
        <Component Id="PCComponent" Guid="!GUID1!" DiskId="1">
          <File Id="prog.exe" Name="prog.exe" Source="prog.exe" Vital="yes">
            <Shortcut Id="PROG_ShortCut" Directory="ProgramsCompanyName" Name="$(var.PROG_VSHORT)" LongName="$(var.PROG_LNK)" Description="$(var.PROG_LNK_DESC)" WorkingDirectory="TARGETDIR" />
          </File>
          <File Id="prog_gui.dll" Name="prog_gui.dll" Source="prog_gui.dll" Vital="yes" />
          <File Id="prog_krn.dll" Name="prog_krn.dll" Source="prog_krn.dll" Vital="yes" />
        </Component>

        <Directory Id="DataDir" Name="DATA">
          <Component Id="RemoveConfigs" Guid="!GUID2!">
            <RemoveFile Id="progdata.bin" Name="progdata.bin" On="uninstall" />
            <RemoveFolder Id="DataDir" On="uninstall" />
          </Component>
        </Directory> <!-- DataDir -->

      </Directory>
    </Directory>
  </Directory>
</Directory>

<Feature Id="PCFeature" Title="$(var.PROG_SHORT)" Description="This is a feature description" Level="1" ConfigurableDirectory="INSTALLDIR">
  <ComponentRef Id="PCComponent" />
  <ComponentRef Id="Toolkit" />
</Feature>

<Feature Id="RemoveConfigsFeature" Title="Remove config files" Level="1" Display="hidden">
  <ComponentRef Id="RemoveConfigs" />
</Feature>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.