[Delphi] Application Service, Wątki i sterowanie usługą

0

Witam piszę system złożony z 3 aplikacji pod Windows Server, jedna aplikacja jest usługą uruchamiającą się przed zalogowaniem TIMECHECK, druga aplikacja OBLICZENIA jest wywoływana przez usługę TIMECHECK i po skończeniu swojej pracy automatycznie się zamyka(application.terminate), zaś trzecia aplikacja może być uruchomiona dopiero po zalogowaniu i służy do ustawienia parametrów w pliku z których korzystają dwie poprzednie oraz do sterowania usługą TIMECHECK. Aplikacja OBLICZENIA i usługa TIMECHECK muszą się ze sobą komunikować.

Powyższe jest tylko projektem i potrzebuję parę informacji.

Moje pytania są następujące :

  1. Czy to dobre rozwiązanie i czy ShellExecute która ma za zadanie wywołać aplikacje OBLICZENIA zadziała. Czy w ogóle mogę uruchomić aplikację OBLICZENIA (nie posiadająca komponentów wizualnych ale posiadająca inne komponenty nie wizualne) przy pomocy usługi TIMECHECK za pomocą ShellExecute przed zalogowaniem do systemu (chodzi mi tu między innymi czy nie wpłynie to na stabilność WS2003).

  2. Do sterowania pracą usługi mam zamiar użyć rejestru systemowego, do komunikacji miedzy usługą TIMECHECK i aplikacją OBLICZENIA również chcę skorzystać z rejestru, ale może istnieje jakiś bardziej estetyczny sposób niż ciągła modyfikacja wpisów w rejestrze by umożliwić komunikacje miedzy usługą i aplikacją sposób ? (tak by mogła się odbywać komunikacja bez logowania użytkownika);

  3. Aplikacja OBLICZENIA generuje wątek który dokonuje wszystkich obliczeń, czy to dobre rozwiązanie ??

0

To tylko gdybanie ale wydaje mi się że tą drugą aplikację powinieneś uruchomić jako usługę (net start). Co do komunikacji, to temat ostatnio wałkowałem tylko w troche innej sytuacji (srvany + instsrv). Przyszedł mi wówczas pomysł do głowy, żeby zrobić sterowanie poprzez socket'y - bo i tak aplikacja z nich korzysta. I z tego co sprawdzałem nie ma z tym najmniejszych problemów. Nie wiem jak to jest ze zwykłymi usługami (przy srvany jest inaczej) ale może jakoś dało by się wysłać komunikat do tego procesu (PostThreadMessage) ?

0
b0bik napisał(a)

To tylko gdybanie ale wydaje mi się że tą drugą aplikację powinieneś uruchomić jako usługę (net start).

Dobra sprawdziłem jak by to wszystko działało jako usługi i dzięki b0bik za podpowiedź, nie muszę sie teraz pierniczyć z ShellExecute tylko będę uruchamiał usługę z poziomu delphi, zostaje jeszcze tylko sprawa jak zrobić by usługa nie uruchamiała się automatycznie, bo chcę uruchamiać jedną z usług prze inną usługę czy wystarczy tylko ustawać StartType na stManual ??

b0bik napisał(a)

Co do komunikacji, to temat ostatnio wałkowałem tylko w troche innej sytuacji (srvany + instsrv). Przyszedł mi wówczas pomysł do głowy, żeby zrobić sterowanie poprzez socket'y - bo i tak aplikacja z nich korzysta.

I czy mógłbyś mi podać odnośnik do tego tematu o komunikacji przez gniazda ??

0
Rady napisał(a)

... zostaje jeszcze tylko sprawa jak zrobić by usługa nie uruchamiała się automatycznie, bo chcę uruchamiać jedną z usług prze inną usługę czy wystarczy tylko ustawać StartType na stManual ??

Jak ustawisz, ją na uruchamianie ręczne to się nie uruchomi sama, dopóki jej nie odpalisz.

Rady napisał(a)

I czy mógłbyś mi podać odnośnik do tego tematu o komunikacji przez gniazda ??

Pod pojęciem wałkowania miałem na myśli rozwiązywanie tego problemu, a nie pisanie o tym na forum. Ale, chyba gdzieś też takie coś widziałem ... mam, może coś pomoże:

Service Application
Wstęp do programowania z użyciem gniazd

0

Wszystko działa super na tym rozwiązaniu z usługami :) Dzięki za pomoc.

Następny mój projekt możliwe że będzie wykorzystywał socket'y więc zagadnienie sterowania usługami za ich pomocą pewnie zacznę rozpatrywać, jeśli uda mi się rozwiązać to zagadnienie do opiszę je.

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