Łukasz Sokólski

Łukasz Sokólski Programista .NET, C#

Temat: Autoupdate aplikacji - how to ?

Witam!
Jestem w trakcie kończenia aplikacji i został mi do opracowania moduł aktualizacji. Ze względu na specyfikę klienta nie wchodzi w grę aktualizacja na zasadzie: ściągnij program ze strony www, zainstaluj. Aplikacja musi "sama" sprawdzać aktualizację i "sama" instalować się.
Chciałbym przedstawić swoją koncepcję i zapytać Was, co o tym myślicie?
A więc:
1. Aplikacja po każdym uruchomieniu sprawdza czy jest nowa wersja. Jak sprawdza, mniejsza o to, można w aplikacje zaszyć na sztywno nr wersji, a przy każdym uruchamianiu sprawdza web service, łączy się z bazą, porównuje, jak mówię tutaj rozwiązań jest kilka
2. Jeżeli jest nowa wersja aplikacja uruchamia osobną aplikację (może być zaszyta w dll'ce), zamyka się a osobna aplikacja ściąga najnowszą wersję, zamienia obecną i zamyka się (można dać komunikate, że teraz możesz uruchomić aplikację główną)

Co o tym myślicie?
Pozostaje jeszcze kwestia aktualizacji bazy, i tu jest większy problem. Stanowisk jest ok 20, jeżeli jedno stanowisko zaktualizuje aplikację, puści skrypt aktualizujący bazę, co z resztą?. Nagle wszyscy będą musieli przerwać pracę i aktualizować program.

Moje pytanie: co o tym myślicie? Czy macie jakieś doświadczenie w tej kwestii?

Pozdrawiam!

konto usunięte

Temat: Autoupdate aplikacji - how to ?

`Piotr Sowa edytował(a) ten post dnia 12.02.12 o godzinie 16:01
Łukasz Sokólski

Łukasz Sokólski Programista .NET, C#

Temat: Autoupdate aplikacji - how to ?

Oczywiście w bazie danych jest nr wersji, dodatkowo w aplikacji jest wbity nr.
Muszę chyba rozbić aktualizację na dwie warstwy:

1. baza - i tutaj mam pomysł, że napiszę dodatkowo winService, który np o okreslonej godzinie (np 02:00 w nocy) łączy się z serwerem zewnętrznym, jeżeli znajdzie nową wersję (porówna to co dostanie z np webservice'u z tym co ma w bazie lokalnej) i zauktualizuje Tylko bazę - skryptem)

2. aplikacja - przy starcie sprawdza na bazie czy nr wersji zgadza się z nr wersji zaszytej w aplikcaję, jeżeli nie, ściąga nową wersję w sposób opieany powyżej.

Dodam, że serwer bazy - MySQL 5.1 (wymóg klienta), więc nie wiem, czy mogę przełączać się w single/multi user

Może ktoś z Was miał z tym doczynienia? Jeżeli stosowaliście autoupdate opiszcie jak możecie swoje "algorytmy" :)Łukasz Sokólski edytował(a) ten post dnia 20.08.10 o godzinie 08:35
Dariusz Sobala

Dariusz Sobala Black House sp. z
o.o.

Temat: Autoupdate aplikacji - how to ?

Łukasz Sokólski:
Witam!

Witam

Moja koncepcja jest taka aby wydzielić aktualizację bazy jako czynność typowo administracyjną.

Program klient niech zajmuje się sobą. Po uruchomieniu klienta powinno nastąpić porównanie wersji bazy z wersją do której został przystosowany. W przypadku niezgodności komunikat o konieczności aktualizacji programu. Oczywiście aktualizacja programu w miarę potrzeb także wtedy gdy schemat bazy nie ulega zmianie.

Pozdrawiam

konto usunięte

Temat: Autoupdate aplikacji - how to ?

Łukasz Sokólski:
Nagle wszyscy będą musieli przerwać pracę i aktualizować program.

Tak to powinno działać bo inaczej będziesz miał duży problem z koniecznością utrzymywania wstecznej kompatybilności aplikacji, bazy bo nigdy nie będziesz miał pewności, że klient jest w jednej, słusznej wersji, nie wspominając już o tym, że dane w bazie mogą się rozjechać.
Dariusz Żukowski

Dariusz Żukowski [keczerad]
Programista z
zamiłowania.

Temat: Autoupdate aplikacji - how to ?

1. Oddzielić aktualizacje bazy SQL od aktualizacji oprogramowania.
2. Wszystko z bazy pobierać do programu jako procedury składowane.

Program przy każdym włączeniu sprawdzą sobie "serwerze" czy są jakieś nowe zapytanie SQL do wykonania, jeżeli są wykonuje je i aktualizuje baze.

Program raz dziennie sprawdza na "serwerze" czy są jakieś nowe wersje i jeżeli są to pyta klienta czy chce pobrać, pobiera i instaluje.

Dlaczego tak, przeważnie pomyłki w programie dotyczą zapytań SQL, wsadzajac wszystkie do procedur unikasz aktualizacji 20 klientow nową wersją, wystarczy ze pociaganiesz nowy zestaw zapytań SQL i po sprawie. Program sam sie aktualziuje bez konieczności instalacji , niektorzy klienci nawet nie zauważa ze są błędy.

konto usunięte

Temat: Autoupdate aplikacji - how to ?

2. Jeżeli jest nowa wersja aplikacja uruchamia osobną aplikację (może być zaszyta w dll'ce), zamyka się a osobna aplikacja ściąga najnowszą wersję, zamienia obecną i zamyka się (można dać komunikate, że teraz możesz uruchomić aplikację główną)

A jak poradzisz sobie z frustracją użytkownika takiej aplikacji co musi się zamknąć? :)

Jak Ci Windows mówi, że musi zresetować, o tak:


Obrazek

Nigdy nie marzyłeś o tym, żeby tam było więcej niż 4 godziny? :)Karim A. edytował(a) ten post dnia 26.08.10 o godzinie 06:54

konto usunięte

Temat: Autoupdate aplikacji - how to ?

Skoro to jest taka aplikacja, którą używa duża grupa ludzi, to moim zdaniem najlepiej byłoby zapewnić jakiś serwis, który chodziłby Sobie na serwerze i sprawdzał dostępne aktualizacje.
1.Sprawdzałby czy jest aktualizacja.
Jeśli tak -> ściąga ją na dysk.
2 Sprawdzałby czy ktoś korzysta z bazy.
Jeśli tak -> czeka i sprawdza za jakiś czas.
Jeśli nie -> zakazuje dostępu do bazy ( przełączenie bazy w single, blokowanie poprzez jakiś webserwis [ na zasadzie klient się pyta zanim coś zrobi ] ). Aktualizuje bazę.
3. Na starcie klient pyta serwer czy może się połączyć.
Jeśli tak - > to spawdza wersję aktualną ( też dowolność jak ) pobiera aktualizację z naszego serwera, oszczędność czasu. Dokonuje aktualizacji.
Jeśli nie - > wyświetla komunikat, że przebiega aktualnie aktualizacja serwera, spróbój za chwilę ( można ją określić, poprzez sprawdzenie postępu aktualizacji ).

Tym sposobem nikomu nie przerwiemy pracy, jeśli będzie ktoś siedział i miał otwarte 50 okien z ważnymi danymi. Drugie zawsze klient będzie się łączył z aktualną wersją bazy. Nie będzie sytuacji, że ktoś pracuje na starej wersji klienta, a baza jest już nowa, itp..

Oczywiście trzeba przewidzieć i dać możliwość w jakiś sposób wymuszenie zamknięcia klientów ( wyłączenia bazy ) i dokonania aktualizacji. Chociaż możliwe jest to w prozaiczny sposób poprzez odpięcie serwera od sieci w firmie:)Łukasz Machowski edytował(a) ten post dnia 26.08.10 o godzinie 09:31
Łukasz Sokólski

Łukasz Sokólski Programista .NET, C#

Temat: Autoupdate aplikacji - how to ?

Karim A.:
A jak poradzisz sobie z frustracją użytkownika takiej aplikacji co musi się zamknąć? :)

Frustracji nie będzie ponieważ program sprawdzi czy jest nowa wersja przy uruchomieniu a nie podczas użytkowania.
Łukasz Machowski:
1.Sprawdzałby czy jest aktualizacja.
Jeśli tak -> ściąga ją na dysk.

Super, odciążamy końcówki, niech serwer pociągnie nową wersję

Odnośnie dalszych propozycji nie mogę blokować dostępu podczas normalnego użytkowania przez userów (w godzinach 07:00 - 22:00). Ale przyszło mi coś do głowy:
Serwer ma rzuconą w harmonogram zadań aplikację do sprawdzania na zewnątrz nowych wersji, np o 2:00 uruchamia aplikację, sprawdza, aplikacja aktualizuje bazę i trzyma pakiety do aktualizacji końcówek, pracownicy przychodzą o 7:00 do pracy, uruchamiają program, podczas startu aplikacji-koncówki, sprawdza ona czy jest nowa baza i czy są pakiety aktualizacyjne na serwerze, jeśli tak info, że trwa aktualizacja a program uruchomi się za chwilę. W tym czasie pobiera pakiety aktualizacji i uruchamia się. Czyli nie blokuje programu podczas pracy, a stanowisk używających aplikacji jednocześnie może być nawet kilkadziesiąt. Stąd jest duża prośba od strony klienta, żeby nie obciążać tym informatyka, bo on ma co robić:)

Dzięki za odpowiedzi i dyskusję, jeśli ktoś chciałby coś dodać to zapraszam do pisania.

Pozdrawiam

konto usunięte

Temat: Autoupdate aplikacji - how to ?

Frustracji nie będzie ponieważ program sprawdzi czy jest nowa wersja przy uruchomieniu a nie podczas użytkowania.

W takim wypadku polecam ClickOnce.
Tomasz Poradowski

Tomasz Poradowski Specjalista od
wytwarzania
oprogramowania

Temat: Autoupdate aplikacji - how to ?

Łukasz Sokólski:
Dzięki za odpowiedzi i dyskusję, jeśli ktoś chciałby coś dodać to zapraszam do pisania.

W aplikacjach fakturująco-magazynowych typu Subiekt czy Vendo, dostępnych na rynku od lat, podobnie rozwiązywano ten problem jak opisano powyżej - z poziomu aplikacji klienckiej, która uruchomiona w nowej wersji (jako pierwsza na danym stanowisku) uzyskiwała wyłączny dostęp do bazy celem jej upgrade'u; wszystkie inne końcówki nie mogły się wówczas łączyć, a po zakończeniu upgrade'u musiały być zgodne z nową wersją bazy, więc albo zostały już wymienione, albo aplikacja wywalała komunikat, że wersja bazy jest nowsza niż obsługiwana przez obecną wersję. Nie wiem jak teraz, może dodali już coś w rodzaju aktualizacji z centralnego serwera w firmie :)

konto usunięte

Temat: Autoupdate aplikacji - how to ?

Karim A.:
Frustracji nie będzie ponieważ program sprawdzi czy jest nowa wersja przy uruchomieniu a nie podczas użytkowania.

W takim wypadku polecam ClickOnce.

Tak, ale wydaje mi się, że kolega chce sam zarządzać aktualizacją;)

W prostych programach to rzeczywiście jest bardzo dobre rozwiązanie. I sprawdza się bardzo dobrze.Łukasz Machowski edytował(a) ten post dnia 27.08.10 o godzinie 11:47
Łukasz Sokólski

Łukasz Sokólski Programista .NET, C#

Temat: Autoupdate aplikacji - how to ?

Tomasz Poradowski: [...] wszystkie inne końcówki nie mogły się wówczas łączyć, a po zakończeniu upgrade'u musiały być zgodne z nową wersją bazy [...]

Pomysł jak najbardziej trafny, tylko w moim przypadku nie mogę blokować stanowiska (aplikacji) podczas dnia pracy, stąd mój pomysł żeby działo się to po godzinach pracy firmy klienta. A następnego dnia przychodzą pracownicy i wtedy komunikat + progress bar i informacja, że aktualizacja przebiegła poprawnie, wtedy Pani Zosia/Gosia czy Basia uruchamia aplikacje i jest już ona zgodna z wersją bazy znajdującą się na serwerze (gdzie wcześniej przebiegła aktualizacja samej bazy)
Łukasz Machowski
Tak, ale wydaje mi się, że kolega chce sam zarządzać aktualizacją;)

Tak! Poprzez przygotowanie paczek instalacyjnych na serwerze zewnętrznym.

Wiem, że najlepiej dla mnie byłoby umieszczanie nowej wersji na serwisie www, i tylko informowanie klienta o tym, ale klient się na to nie godzi, a jak wiemy klient płaci klient żąda:)

Pozdrawiam!
Tomasz Poradowski

Tomasz Poradowski Specjalista od
wytwarzania
oprogramowania

Temat: Autoupdate aplikacji - how to ?

Łukasz Sokólski:
Tomasz Poradowski: [...] wszystkie inne końcówki nie mogły się wówczas łączyć, a po zakończeniu upgrade'u musiały być zgodne z nową wersją bazy [...]

Pomysł jak najbardziej trafny, tylko w moim przypadku nie mogę blokować stanowiska (aplikacji) podczas dnia pracy, stąd mój pomysł żeby działo się to po godzinach pracy firmy klienta.

Z tego co pamiętam, to upgrade'u nie można było wykonać gdy były jakieś inne sesje otwarte, więc de facto należałoby najpierw wszystkich wylogować (lub ubić sesje) a dopiero potem przystąpić do aktualizacji - czyli również można było to zrobić "po godzinach" (0 otwartych sesji), więc wychodzi podobnie :). Ale wersja z update'em na serwerze i potem tylko dystrybucją nowszej aplikacji na końcówki bardziej mi się podoba :)Tomasz Poradowski edytował(a) ten post dnia 27.08.10 o godzinie 15:17
Mariusz Płaskowicki

Mariusz Płaskowicki Software Developer,
Oxford Computer
Consultants Ltd

Temat: Autoupdate aplikacji - how to ?

Oczywiście musisz sobie zdawać sprawę z tego że pewnie część pracowników nie wyłącza sprzętu na noc tylko go hibernuje z włączoną aplikacją, więc może być też tak że w nocy się ładnie zaktualizuje wszystko, rano 99% pracowników zobaczy progress bar i będzie działało na nowej wersji a ten 1% będzie wciąż się do bazy dopierał starym klientem. Więc chyba warto co jakiś czas jednak sprawdzać czy wszystko jest ok również w czasie dnia - nie tylko przy uruchomieniu.

M
Łukasz Sokólski

Łukasz Sokólski Programista .NET, C#

Temat: Autoupdate aplikacji - how to ?

Mariusz Płaskowicki:
Oczywiście musisz sobie zdawać sprawę z tego że pewnie część pracowników nie wyłącza sprzętu na noc tylko go hibernuje z włączoną aplikacją...

M

Po pierwsze nie wszystko można przywidzieć, a zwłaszcza przyzwyczajeń użytkowników systemu i ich nawyków :)
Uwaga jak najbardziej słuszna, porozmawiam z klientem, aby odgórnie nakazał wszystkim wyłączanie jednostek na noc (oszczędność prądu, itp)

Dziękuję wszystkim za udział w dyskusji.

konto usunięte

Temat: Autoupdate aplikacji - how to ?

Najlepszym sposobem na aktualizacje jest wydzielenie funkcjonalności aplikacji, która może ulec zmianie do osobnego assembly (np. pojedyncza dll). Można wtedy robić aktualizację w bez zamykania aplikacji klienta i reboota systemu.

Jeżeli chodzi o zmiany w bazie, to powinny się one ograniczyć do dodawania nowych pól, tablic, procedur. Dzięki temu baza będzie zgodna wstecz z poprzednimi wersjami i nawet jeżeli ktoś nie zaktualizuje aplikacji, to będzie mógł korzystać z nowej bazy.

konto usunięte

Temat: Autoupdate aplikacji - how to ?

Szymon Krępski:
Najlepszym sposobem na aktualizacje jest wydzielenie funkcjonalności aplikacji, która może ulec zmianie do osobnego assembly (np. pojedyncza dll). Można wtedy robić aktualizację w bez zamykania aplikacji klienta i reboota systemu.

nie wyobrażam Sobie aby robić aplikację poważną z dużą funkcjonalnością w jednym pliku exe :) jakieś małe aplikacje na studiach, proste aplikacje komerycjne tak.. ale nie nic poważnego
Jeżeli chodzi o zmiany w bazie, to powinny się one ograniczyć do dodawania nowych pól, tablic, procedur. Dzięki temu baza będzie zgodna wstecz z poprzednimi wersjami i nawet jeżeli ktoś nie zaktualizuje aplikacji, to będzie mógł korzystać z nowej bazy.

pięknie, ale nie realne:) rzeczywistość z reguły nie jest taka piękna jak teoria:)

konto usunięte

Temat: Autoupdate aplikacji - how to ?

Łukasz Machowski:
pięknie, ale nie realne:) rzeczywistość z reguły nie jest taka piękna jak teoria:)

dlaczego?

konto usunięte

Temat: Autoupdate aplikacji - how to ?

Przemysław R.:
Łukasz Machowski:
pięknie, ale nie realne:) rzeczywistość z reguły nie jest taka piękna jak teoria:)

dlaczego?

ponieważ zdarza, się że pewna funkcjonalność się zmienia i nagle okazuje się, że nie potrzebne są pewne rzeczy... a w dobrym zwyczaju jest sprzątać po nie potrzebnych rzeczach, dla późniejszej przejrzystości:)

Następna dyskusja:

Programista Aplikacji Klien...




Wyślij zaproszenie do