2013-07-30 14 views
6

Przeczytałem wszystkie tematy na tej stronie z takim problemem, ale nie mogę znaleźć tego, czego potrzebuję.wix - jak usunąć niepusty folder

Mam dwie wersje jednego programu: stary i nowy. W starej wersji mam folder f1. W nowej wersji nie mam tego folderu f1.

Kiedy instalator nowego programu wykrył starszą wersję, usuwa starą wersję, ale nie folder f1.

Jak mogę usunąć f1 z instalatora nowej wersji?

 <Component Id ="deleteall" Guid="AA11A32B-9E1E-458A-8C94-3EFEDA77E494" > 
     <RemoveFolder Id='iDocDir' On='both' /> 
     </Component> 

     <Directory Id="iDocDir" Name="iDocs"> 
     </Directory> 

nie działa = (

+0

Czy przeprowadzasz poważną aktualizację lub niewielkie uaktualnienie? –

Odpowiedz

11

Należy zapoznać się z RemoveFolderEx element in the UtilExtension. Robi dokładnie to, co chcesz. Bob Arnson has blogged about it before.

<Component Id="deeletall" Guid="PUT-GUID-HERE"> 
    <util:RemoveFolderEx Id="RemoveiDocDir" On="uninstall" Property="iDocDir" /> 
</Component> 

Działa pisząc tymczasowe Rowes do stołu RemoveFile. Istnieje ograniczenia dotyczące korzystania z tego, jednak, jak wskazano w instrukcji:

Ponieważ może to znacząco wpłynąć na kalkulację kosztów pliku Instalatora Windows, , tymczasowe wiersze muszą zostać zapisane przed działaniem standardowym CostInitialize . Niestety, MSI nie tworzy właściwości dla hierarchii katalogów w paczce do później, w akcji CostFinalize .

Łatwym sposobem obejścia typowego przypadku usunięcia folderu podczas deinstalacji jest napisanie ścieżki katalogu do rejestru i załadowanie podczas deinstalacji.

Jeśli do ustawiania właściwości używasz działań niestandardowych, upewnij się, że są one ustawione przed niestandardową akcją WixRemoveFoldersEx.

A także na stanowiskach Boba:

jak dodawanie katalogów i plików do usunięcia wpływa MSI plik kosztorysowania, RemoveFolderEx ma zrobić jego rzecz przed kosztują. Niestety, MSI nie ustawia właściwości dla katalogów docelowych do czasu zakończenia kalkulacji.

Jeśli już uratować swoją poprzednią ścieżkę instalacyjną (Rob wyjaśnia, jak to zrobić here) w rejestrze, jesteś w porządku, jak przebiega akcja AppSearch przed CostInitialize.

+0

Ostrzeżenie: On = "uninstall" usuwa także folder podczas aktualizacji. – Simon