uruchamianie aplikacji

0

witam.
w jaki sposób uniemożliwić użytkownikowi uruchamianie wielu instancji tej samej aplikacji?

pozdrawiam.
a.

0

Nie wiem jak należałoby to zrobić, ale w ostateczności możesz np. w pierwszej aplikacji dzięki ServerSocket otworzyć jakiś port, a na początku odpalania sprobować połączyć się z tym portem. Jeśli się uda, to znaczyć będzie że pewnie ten program już jest uruchomiony. No ale to lipny pomysł i na pewno da się to jakoś prościej zrobić (może odpowiednie metody w System?). Oprócz pierwszego rozwiązania nic innego nie przychodzi mi do głowy :/.

0

aplikacja korzysta z pliku konfiguracyjnego. mógłbym zamykać strumień do pliku w momencie zamykania aplikacji, a nie tuż po odczytaniu konfiguracji. w ten sposób kolejne instancje nie mogłyby odczytać ustawień i zamykałyby się.

cały czas jednak szukam innego rozwiązania.
pozdrawiam.

0

Wg mnie pomysł -CD- jest chyba najlepszym (najprostszym) rozwiązaniem
ewentualnie możesz spróbować wykryć wszystkie aktywne procesy i tam poszukać, czy jest już uruchomiona jakaś kopia programu, w linuxie masz f-cję ps, ale pod windą byłby z tym problem.....:( (chyba, że jakiś prosty exec i jni), ale to chyba za dużo roboty......
ten problem był pruszany także na forum suna:
http://forum.java.sun.com/thread.jspa?forumID=256&threadID=206535

0

Jeśli nie wiesz jak obsługiwać sieć, a znasz się na plikach, to można też zrobić tak, że pierwszy program zapisuje plik na dysku i wówczas drugi już się nie odpali jeśli będzie już ten plik. Ale to ma swoje wady, bo w przypadku nagłego reseta komputera plik zostanie i potem w ogóle się już nie da odpalić programu. No chyba że uruchomiony program co np. kilka sekund wpisywałby do tego pliku aktualną datę by dać znać temu drugiemu uruchamianemu, że cały czas działa. Ale nie wiem czy wówczas nie będzie konfliktu że np. oba programy będą chciały naraz korzystać z tego samego pliku. Tylko że niestety te oba moje rozwiązania raczej lipne są. Myślę, że dasz radę znaleźć lepszy sposób.

0

ja bym się najpierw zapytał: po co ci taka funkcjonalność?

Podsumowując: każdy program odpala się we własnym środowisku i jedyna droga do sprawdzenia czy jest już uruchomiony to System Operacyjny, na którym działa JVM. Tak jest i w przypadku socketów, i plików, i rejestru i... itp. Żle napisana obsługa takiego zabezpieczenia przed kolejnym uruchomieniem to poważny błąd uniemożliwiający użytkownikowi pracę z Twoim programem. Czy naprawdę jest sens to robić?

btw. jak mnie kiedyś wk*** pliki .lock bazy HSQL, ech... Nieważne :)

0

a czemu nie?
chcę uniemożliwić równoległą modyfikację danych w katalogu roboczym. żądanie zmiany katalogu jest rozwiązaniem ostatecznym.

0
Arune napisał(a)

a czemu nie?
chcę uniemożliwić równoległą modyfikację danych w katalogu roboczym. żądanie zmiany katalogu jest rozwiązaniem ostatecznym.

No spox... Ale czy to nie jest błąd projektu...? Może jakiś temp, albo pliki, które są tworzone per-instancja? Tak tylko gdybam... Bo jak widzisz takie zabezpieczenie nie jest zbyt wygodne (!?)...

1 użytkowników online, w tym zalogowanych: 0, gości: 1