2012-10-05 22 views
5

Mamy funkcję zaćmienia, która jest licencjonowana, a licencja jest obsługiwana przez nasz własny kod. Użytkownik może wejść na naszą stronę aktualizacji i ulepszyć swoją funkcję. Problem, przed którym stajemy, to kwestia, kiedy licencja użytkownika musi zostać zaktualizowana, zanim będzie mógł skorzystać z nowej aktualizacji.Jak sprawdzić poprawność aktualizacji przed instalacją

Chciałbym sprawdzić poprawność wersji funkcji na podstawie licencji użytkownika i ostrzec użytkownika, że ​​jego licencja musi zostać zaktualizowana przed instalacją.

Myślałem, że zrobię to za pomocą niestandardowego ataku eclipse p2 touchPoint validateLicense.

Przykład:

Mój kod nazywa, gdzie mogę potwierdzić wersję przed licencji użytkownika. Jeśli się nie powiedzie, ostrzegam użytkownika, a następnie może anulować instalację.

Tak więc moje pierwsze pytanie brzmi:

  • Czy mam takie prawo, czy też jest jakiś inny sposób to zrobić?

Moje drugie pytanie jest dość prosty:

  • Gdzie mogę powiedzieć zaćmienie uruchomić mój kod? Mam wyglądać here at eclipse help, gdzie wyjaśniają, co to jest. Ale nie rozumiem, gdzie umieścić informacje, aby uruchomić mój kod? Czy to w pliku feature.xml.

Wreszcie:

  • Czy jest przykładem, jak tworzyć i touchPonts użycie P2?

Odpowiedz

1

Zaimplementowałem niestandardową akcję, jak pokazano here i mam system, który wydaje się działać. W moim przypadku pominięto rozszerzenie "touchpoint", ponieważ jest ono niepotrzebne, ale reszta jest taka sama.

Moja akcja jest wykonywana podczas fazy instalacji mojej funkcji (instructions.install), ale być może faza konfiguracji też może działać. Faza zbierania nie działa.

Czynność jest wykonywana podczas procesu instalacji, po tym, jak pobieranie zostało już wykonane. Idealnie byłoby przed pobraniem, ale nie jest to dla mnie duży problem. Zwrócenie statusu błędu z działania powoduje anulowanie instalacji.Pozostawia niektóre pobrane pliki, ale nie są one aktywowane i prawdopodobnie zostaną później usunięte przez moduł do zbierania śmieci p2.

Udało mi się także zrobić kilka ciekawych rzeczy. Moja wtyczka działania ma zależność (opcjonalną i nie-chciwą) na mojej głównej wtyczce. Tak więc instalacja działa tak:

  • działania wtyczki jest pobierany
  • niestandardowa akcja jest wykonywana
  • Akcja wykrywa, czy mój główny plugin jest już zainstalowany, a jeśli tak, to nazywa się to, aby odzyskać licencji info. Główna wtyczka musi ujawnić API dla akcji. Akcja sprawdza również wersję głównej wtyczki, aby wykryć, czy interfejs API istnieje.
  • Akcja może teraz zdecydować, czy kontynuować, czy anulować instalację. Może nawet wchodzić w interakcje z użytkownikiem za pomocą Display # syncExec (tak robi kod w fazie CheckTrust, więc uważam, że jest bezpieczny). W razie potrzeby działanie może również wykryć, czy instalacja jest bezgłosowa.

Niektóre pułapek:

  • Akcja sama musi być wersji. Jest to wersja, którą deklarujesz w plikach plugin.xml i p2.inf i różni się ona od wersji wtyczki. Po prostu zastępuję wersję 1.0.0 tą samą wersją, którą ma moja wtyczka. W ten sposób najnowsza wersja wtyczki działania jest zawsze pobierana przed wykonaniem. To jest świetne, ponieważ teraz wszelkie zmiany w zasadach licencjonowania mogą być implementowane w pluginach akcji.
  • Interfejs API akcji został zmieniony między Eclipse 3.5 a 3.6. Prawdopodobnie zrezygnuję z obsługi 3.5, ponieważ jest całkiem stara.
  • Wtyczka działania powinna być prawdopodobnie podpisana. Tak jest w moim przypadku. Wydaje mi się, że system jest dla mnie zbyt potężny, ponieważ wystarczy wskazać Eclipse na stronie aktualizacji, aby wykonał pobrany kod.

Nadal muszę sprawdzić, jak to działa z różnymi wersjami Eclipse i innych IDE. Widziałem dziwny (nieblokujący) błąd z 3.6. Jednak wyniki są obiecujące i wygląda na to, że system może faktycznie działać.

+0

To było naprawdę świetne! Dzięki – giZm0

1

Punkty dotykowe są wykonywane w czasie instalacji, co oznacza, że ​​rozdzielczość (sprawdzanie poprawności) już się odbyła. Nie jestem pewien, czy by im pomogli. A co z tworzeniem jednostki instalowalnej (IU) (lub Eclipse Feature) reprezentującej licencję zainstalowaną przez użytkownika. Wtedy uzależnisz swój produkt od tej licencji.

Na przykład utwórz IU o nazwie com.mycompany.license (1.0.0). Użytkownik utworzyłby inny o nazwie com.mycompany.license (2.0.0). Po zainstalowaniu licencji do jednostki zostanie dodana odpowiednia jednostka IT.

Teraz, po przejściu do zainstalowania produktu, nowa wersja produktu będzie wymagać wersji 2.0.0. Jeśli ta licencja nie zostałaby zainstalowana, rozdzielczość nie powiodłaby się.

Czy to ma sens? Myślisz, że to by pomogło?

+0

To interesujący pomysł, ale czy to pozwoli mi uruchomić kod? Nie ma znaczenia, czy dzieje się to przed instalacją czy po niej, tylko że dzieje się to podczas instalacji. Czy jest to dobra dokumentacja o tym gdzieś, o czym wiesz? – giZm0

+0

Dlaczego chcesz uruchomić kod? Jeśli potrzebujesz uruchomić dowolny kod, to tak, potrzebujesz punktu kontaktowego. Ale punkt kontaktowy nie może spowodować awarii instalacji (cóż, myślę, że mógłbyś rzucić wyjątek i spróbować wycofać wszystko z powrotem, ale to nie jest tak naprawdę ich praca). Jeśli chcesz sprawdzić, czy licencja jest rzeczywiście poprawna, zrobiłbym to w czasie wykonywania (nie czasie instalacji) i po prostu użyj sztuczki IU, aby upewnić się, że użytkownik nie dostanie się w nieprawidłowy stan. Jeśli chodzi o dokumenty, trochę tu jest http://wiki.eclipse.org/Equinox/p2/Customizing_Metadata. – irbull

+0

Sprawdzanie poprawności musi uruchomić kod, aby można było sprawdzić poprawność. Sprawdzam na serwerze lub w niektórych przypadkach sprawdzam tylko "magazyn kluczy". Pomysł, aby rzucić wyjątek lub po prostu zwrócić false podczas sprawdzania, tak jak w przypadku braku zależności, był tym, co chciałem zrobić. Ale po prostu nie mogę tego zmusić do działania. Przyjrzę się bliżej IU, ale na pierwszy rzut oka nie wydaje mi się to pomocne. Dzięki! – giZm0

Powiązane problemy