2011-06-29 10 views
7

Wiele razy widziałem to pytanie, ale żadna z odpowiedzi nie wydaje się działać dla mnie. Najwyraźniej brakuje mi czegoś podstawowego, ale nie mogę się dowiedzieć, co to jest! Używam WiX tylko przez kilka dni, więc wciąż jestem dla niego nowy.Plik sprawdzania WiX istnieje przed instalacją

Zasadniczo zbudowałem wtyczkę do istniejącego produktu i chcę sprawdzić, czy produkt jest zainstalowany przed zezwoleniem na instalację wtyczki. Myślę, że najprostszym sposobem jest sprawdzenie, czy główny plik wykonywalny znajduje się we właściwym katalogu.

Moja odpowiedni kod do tej pory:

<Property Id="FILEEXISTS"> 
    <DirectorySearch Id="CheckFileDir" Path="INSTALLDIR" Depth="0"> 
    <FileSearch Id="CheckFile" Name="main.exe" /> 
    </DirectorySearch> 
</Property> 

<Condition Message="File does exist.">NOT FILEEXISTS</Condition> 

Gdzie INSTALLDIR jest Id z katalogu, w którym main.exe powinny być i jest zdefiniowany w zagnieżdżonych Directory tagów.

Odpowiedz

5

Wyszukiwanie jest wykonywane, zanim użytkownik może ustawić folder instalacyjny w oknach dialogowych MSI. Tak więc to podejście nie będzie działać tak, jak chcesz.

Jeśli chcesz sprawdzić plik w folderze instalacyjnym, sugeruję niestandardową akcję interfejsu użytkownika wykonaną przez zdarzenie sterujące DoAction. To zdarzenie można wywołać za pomocą przycisku Dalej w oknie dialogowym wyboru folderu.

Nie ma żadnych predefiniowanych akcji niestandardowych, dlatego należy napisać kod niestandardowy. Powinien to być DLL lub VBScript, który odbiera uchwyt instalacji. Możesz znaleźć mały tutorial tutaj: http://www.codeproject.com/KB/install/msicustomaction.aspx

+1

Dobrze, Cosmin! Przypuszczam, że w tym przypadku INSTALLDIR powinien sam zostać przeszukany w rejestrze, gdzie główna instalacja aplikacji umieściła go ... –

+0

Tak, odzyskanie starej ścieżki instalacji z rejestru jest dobrym pomysłem. –

+0

Cześć, dzięki za to. Rozumiem, dlaczego teraz. Przejdę do wyszukiwania rejestru, aby uzyskać ścieżkę bardziej kompletnego rozwiązania. W międzyczasie mam go do pracy, zmieniając @Path na "[ProgramFilesFolder] Manufacturer/ProductFolder" i warunek "FILEEXISTS" zamiast "NOT FILEEXISTS" – Chris

1

Przypuszczam, że brakuje Ci nawiasów kwadratowych [] wokół INSTALLDIR w @Path. Również @ Depth = 0 wygląda podejrzanie, po prostu pomiń ten atrybut dla zwykłego wyszukiwania, powinien domyślnie 1 i to jest to, czego zwykle potrzebujesz szukać pliku w katalogu.

Nadzieję, że pomaga, ale aby być surowym, twoje pytanie nie zawiera prawdziwego pytania. Trudno jest zrozumieć, czy pojawia się jakiś błąd, czy warunek po prostu nie działa ...

+0

Przepraszamy, jest to, że warunek nie działa. Niezależnie od tego, czy plik "main.exe" istnieje, czy nie, aplikacja będzie nadal instalowana niezależnie. Próbowałem @Path zi bez [], i po prostu próbowałem pominąć @Depth, ale bezskutecznie. Czy ma znaczenie, czy katalog nadal istnieje, nawet jeśli plik nie jest? Pozdrowienia – Chris

+0

Nie jestem pewien, co masz na myśli, ale właściwość FILEEXISTS zostanie ustawiona tylko na wypadek, gdyby plik został znaleziony w folderze, w którym go przeszukujesz. BTW, sprawdź plik dziennika, aby dowiedzieć się, czy właściwość FILEEXISTS zostanie ustawiona i jaka jest wartość –

Powiązane problemy