2014-04-30 30 views
5

Mam trochę problemów ze zrozumieniem, w jaki sposób InstallShield traktuje aktualizacje.Zawsze wykonuj usuwanie/ponownej instalacji podczas aktualizacji

To, czego chcę, to móc zwiększyć numer wersji na instalatorze, przekompilować i rozprowadzić mój instalator. Powinno to automatycznie usunąć poprzednią wersję aplikacji i zainstalować najnowszą wersję (i powinna być prezentowana użytkownikowi jako "aktualizacja").

To jest bardzo prosty instalator, po prostu pobiera dane wyjściowe z kilku projektów Visual Studio (aplikacja EXE, niektóre biblioteki DLL i tak dalej) i instaluje je wszystkie w Program Files. Jest tylko jedna funkcja i jest zawsze instalowana.

Nie chcę zmieniać kodu aktualizacji produktu, ponieważ musiałbym wtedy utworzyć nowe ścieżki aktualizacji (po jednej dla każdej poprzedniej wersji), co jest kłopotliwe.

Próbowałem już tego wcześniej (zwiększając numer wersji, ale nie zmieniając ani kodu produktu, ani kodu uaktualnienia), ale za każdym razem, gdy uruchamiam instalator, aby "zaktualizować" produkt, mówi " Wznawianie pracy kreatora dla [ProductName] ", a czasami niektóre pliki nie są zastępowane nowszymi odpowiednikami z nowszego instalatora.

Nie zwiększam numeru "zmiany" numeru wersji. Wiem, że to jest ignorowane. Zazwyczaj spróbuję czegoś takiego, jak 2.0.3 => 2.0.4.

Jak skonfigurować program InstallShield tak, aby automatycznie usuwał wszystkie poprzednie wersje, instalował najnowszą wersję i przedstawiał to użytkownikowi jako "Aktualizację" lub "Aktualizację", jeśli mają już zainstalowaną poprzednią wersję? Jeśli nie, powinien zainstalować się normalnie ("Instaluj", a nie "Aktualizuj").

używam InstallShield 2013 Pro (wersja 20 SP1), i trzymać się za pomocą edytora InstallShield wewnątrz Visual Studio 2010.

+0

Jakiego typu projektu używasz? InstallScript MSI, Basic MSI, czysty InstallScript? –

+0

Wierzę, że jest to projekt Basic MSI, ale nie jestem zaznajomiony z InstallShield, więc nie wiem na pewno. Ma plik '.isproj' i plik' .ism' w folderze projektu. – qJake

+0

Myślę, że możesz być w stanie osiągnąć to, co chcesz, po prostu aktualizując tabelę uaktualnień, oprócz tego, co już robisz. Przeczytaj to dokładnie: http://apprepack.blogspot.no/2012/06/msi-upgrade-table.html. Zasadniczo zaktualizuj pole VersionMax. Zakłada to, że konfiguracja jest już skonfigurowana dla scenariusza poważnej aktualizacji. –

Odpowiedz

6

Co trzeba to ważne uaktualnienie. Jest to w istocie automatyczne odinstalowanie istniejącej wersji i ponowne zainstalowanie nowej wersji wykonanej jako jedna operacja przez sam silnik instalacji systemu Windows po utworzeniu tabeli uaktualnień MSI, ustawieniu nowej wersji produktu i zmianie kodu pakietu i produktu. Jest to najmniej podatny na błędy mechanizm aktualizacji w Instalatorze Windows. Aby wdrożyć główną aktualizację w Installshield, przejdź do widoku uaktualnień i dodaj element aktualizacji. Następnie postępuj zgodnie z kreatorem GUI lub stronami i ustaw opcje aktualizacji. Zobaczę, czy mogę teraz znaleźć dla ciebie lepszy link, ale to powinno cię skłonić.

Aby naprawdę zrozumieć uaktualnienia Instalatora Windows, należy przeczytać this book chapter. Lub tego Microsoft MSDN page.

Tylko dla kompletności: niewielka aktualizacja - która aktualizuje istniejącą instalację bez jej odinstalowywania, jest na ogół trudniejsza do uzyskania na samym początku. Obowiązują liczne ograniczenia techniczne. Tutaj jest bardzo dobre podsumowanie tego, co jest wymagane na drobne uaktualnienia do pracy (jak również inne dane): http://www.installsite.org/pages/en/msi/updates.htm

+0

To jest to, ale ... wypieramy częste wersje produktów i tworzenie ścieżki uaktualnienia/ulepszenia dla każdego produktu w projekcie InstallShield jest uciążliwe. Aplikacja powinna obsługiwać aktualizację z dowolnej poprzedniej wersji, więc wymagałoby to elementu dla każdej istniejącej poprzedniej wersji. – qJake

+0

Aktualizacja: To prawda, zmienialiśmy kod uaktualnienia, a nie kod produktu (nazwy tych właściwości są mylące i wydają się wstecz!). Nasze główne aktualizacje działają teraz w każdej poprzedniej wersji. – qJake

0

W takim przypadku można użyć automatyzacji COM zautomatyzować proces uwalniania przy użyciu JavaScript lub VBScript. Jest to znany proces, jeśli zautomatyzowałeś inne produkty, takie jak Word czy Excel.Oto kilka zasobów, aby zacząć zabawę:

Zrobiłem to proces kompilacji raz przy użyciu tego rodzaju VB skryptów, a także narzędzia do kompilacji o nazwie FinalBuilder które miały dbać o resztę procesu budowania. Przypuszczam, że FinalBuilder może mieć akcję dla Installshield w tym punkcie, więc możesz całkowicie pominąć skryptowanie. Nie wiem na pewno. Chciałem tylko połączyć się z GUI, aby zobaczyć, jak wygląda to narzędzie. Further screenshots.

+0

Już korzystamy z TFS do automatyzacji kompilacji, która ma również integrację z InstallShield. Nie jestem inżynierem budującym, więc staram się zrozumieć, co to ma wspólnego z budowaniem samodaktualizujących się instalatorów? Zwykle budujemy ręcznie nasze instalatory za pomocą Visual Studio (jesteśmy małym zespołem). – qJake

+0

Ten proces kompilacji powinien być w stanie wypluć MSI, który wykonuje znaczącą aktualizację wszystkich poprzednich wersji na żądanie - lub nie jest to kompletny proces kompilacji. Nie korzystałem z TFS i nie mogę opisać, jak się tam robi. –

+0

Myślę, że to moje pytanie - jak mogę to zrobić bez procesu kompilacji? W jaki sposób mogę utworzyć plik wykonywalny instalacji, który zostanie ulepszony z dowolnej poprzedniej wersji ... ale * tylko * przy użyciu edytora InstallShield? – qJake