Wstęp
Zakladając, że nasz program działa na zasadzie podziału: frontend i backend, wcześniej czy później trafiamy na problem aktualizacji klientów w sieci. O ile aktualizcha backendu nie sprawia kłopotu bo jest jeden, o tyle już wycieczka po kilku stanowiskach w celu aktualizacji fornt-endu już tak…
Opis problemu
Nie podlega watpliwości, ze wszyscy użytkownicy powinni działać na tej samej wersji frontonu. Problem pojawia się w momencie wprowadzenia aktualizacji wtedy zostaje “ręczna” aktualizacjia, jak problematyczna to zależy od ilości użytkowników i dostepu do ich maszyn. Na rynku znajdziemy kilka narzędzi które pomogą nam nad tym zapanować m.in.:
- Auto FE Updater from Tony Toews (probably the best, but commercial)
- Application Starter from Peter’s Software
- Front End Updater Utility, from Roger’s Access Library
- AutoUpdater, from the UtterAccess archives
- VersionLauncher
Nigdy mówiąc szczerze z nich nie korzystałem bo nie spełniały moich oczekiwań, w pierwszej wersji korzystałem z pliku bat z prostym skryptem do uruchomienia programu, teraz korzystam z wlasnego execa napisanego przy pomocy AutoIt konfigurowanego za pomocą pliku ini, to było jednak wymuszone przez zrobienie instalatora…
Wracjąc jednak do głównego wątku wszystkie te narzędzia opierają się na tym, ze gdzieś na udziale sieciowym jest wersja aktualna i w razie potrzeby jest kopiowania na komputer klienta i uruchamiana.
Rozwiązanie
Założenia:
- Wersja pliku wzorca ma nazwę app.mdb
- Umieszczona jest na udziale sieciowym: \\serwer\aplikacje\app\
- Każdy użytkownik ma prawo dodawania i zmiany plików w tym udziale
Ręcznie dla użytkownika to by było tak:
- Sprawdź czy na udziale sieciowym nie ma nowej aktualizacji
- Jak jest to ja przegraj i uruchom
Odnośnie punktu sprawdzenia to dobrym sposobem jest stworzenie pliku tekstowego złożoną z pary: nazwa komputera + uzytkownik, jezeli takiego pliku nie ma to podmieniamy, jezeli jest to uruchamiamy to co mamy na stacji, to dobrze zrealizuje ten skrypt:
@echo off CLS set masterFile=app.mdb set shareMaster=\\serwer\aplikacje\app\ set destFolder=%AppData%\AppName\ set mark=%computername%_%username% echo %destFolder% IF not EXIST %sharemaster%%mark%.txt GOTO AKTUALIZACJA GOTO URUCHOMIENIE :AKTUALIZACJA ECHO Program wymaga aktualizacji... IF not EXIST %destFolder% MKDIR %destFolder% COPY %sharemaster%%masterFile% %destFolder%%masterFile% /Y ECHO %sharemaster%%mark% > %sharemaster%%mark%.txt :URUCHOMIENIE echo Uruchamianie aplikacji.. c: cd "\Program Files\Microsoft Office\OFFICE11\" start MSACCESS.EXE %destFolder%%masterFile%
Podsumowanie
Najważniejsza zmiana to link do aplikacji nie odnosi się do pliku access’a a do takiego bata.
My w praktyce po aktualizacji wgrywamy nową wersje udziału sieciowego i usuwamy z niego pliki tekstowe. Przyrost plików tekstowych pokaże nam kto i kiedy się zaktualizował.
Chyba o jedno > za malo?
Nie, jest ok, i tak pliki muszą być skasowane aby bat pobrał aktualizacje, w przeciwnym razie przejdzie od razu do uruchomienia programu, celem tego jest to żeby bez sensu nie kopiowac za każdym razem frontonu, tylko wtedy kiedy jest potrzeba…