2009-12-10 21 views
5

Staram się znaleźć rozwiązanie dla następującego problemu:inicjującego: Sprawdź, czy wersja MSI jest zainstalowany przed uruchomieniem

Mam liczne programy (nazwijmy je niewolników), które opierają się na jednym programie (master) . Potrzebuję dystrybucji instalatora dla każdego slave. Ten instalator musi zainstalować wzorzec.

Chcę mieć możliwość obu wersji, więc wiele msi wydaje się być właściwym rozwiązaniem, połączonym łańcuchem z bootstraperem.

Mój problem polega na tym, że jeśli instalator slave zainstaluje tę samą wersję master, który jest już zainstalowany, plik .msi będzie działał w trybie naprawy/usuwania.

Jest to niedopuszczalne z punktu widzenia użytkownika i spowoduje tylko zamieszanie.

Czy istnieje sposób sprawdzenia wersji obecnie zainstalowanych pól przed próbą uruchomienia msi?

Obecnie używam setupbld.exe WIX jako bootstrapper.

Wszelkie inne rozwiązania mile widziana (Próbowałem również połączyć się z modułów bez powodzenia, ponieważ wersjonowanie jest bezużyteczny)

Odpowiedz

1

Zamiast setupbld.exe (który ja naprawdę nie wiem, jak nie mogę znaleźć żadnej dokumentacji) możesz użyć msbuild's generatebootstrapper task. Dokumentacja wix już obejmuje sposób użycia tego zadania do wygenerowania bootstrappera, który instaluje framework .NET. Zobacz How To: Install the .NET Framework Using a Bootstrapper. Wykorzystuje to predefiniowane pakiety bootstrapper.

Jednak w tym przypadku będziesz musiał również utworzyć własne pakiety startowe. Jednym ze sposobów, aby to zrobić, jest zbadanie istniejących pakietów inicjujących w C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\BootStrapper\Packages\ (lub tych w Windows SDK) i przeczytanie documentation of the Bootstrapper Manifest XML format. Pomocne może też być narzędzie bootstrapper generator.

Aby ustalić, czy pakiet musi zostać zainstalowany, można użyć jednego z InstallChecks ustawić właściwość, a następnie sprawdzić wartość nieruchomości w InstallCondition pod elementem Commands.

Jeśli uważasz, że to wszystko jest trudniejsze niż powinno być — Zgadzam się, ale to jest to, czego dotychczas używałem. Istnieje kilka alternatyw, które nie zostały jeszcze wypróbowane:

  • słabo nazwie dotNetInstaller który jest rzeczywiście ogólnego przeznaczenia generator inicjującego.
  • bootstrapper wix 3.5 burn, który nie został jeszcze wydany. Nie jestem pewien, czy jest jeszcze w stanie użytecznym.
+1

Skończyło się na użyciu dotNetInstaller i okazało się, że nie jest doskonały, ale jest lepszy niż przy użyciu Microsoft boostrappers (nie mógł ich uruchomić tak, jak potrzebowałem). Do tej pory każda czynność, którą próbowałem wykonać z dotNetInstaller, zadziałała. Chociaż czasami potrzebuje trochę wskazówek. – gollumullog