[delphi]Service Application po raz kolejny

0

Witam, po raz kolejny poruszam ten problem ponieważ artykuł w tym serwisie ani na innych stronach mi nie pomógł...Mianowicie, chcę napisać usługę która będzie startowała przy samym starcie windowsa(tak jak kaspersky np.) następnie sprawdzała czy w istnieje dany klucz w rejestrze np. i jeśli istnieje to uruchomienie innego programu a jak nie to sama się wyłączy.
Aby wszystko było jasne robiłem tak:
w zdarzeniu >onExecute<:

Timer1.Enabled := True;
 while not Terminated do
    ServiceThread.ProcessRequests(True);
  Timer1.Enabled := False;

i procedura timera:

procedure TService1.Timer1Timer(Sender: TObject);
var reg: tregistry;
istnieje: string;
begin

 Reg := TRegistry.Create;
Reg.RootKey := HKEY_CURRENT_USER;
REg.OpenKey('klucz', true);
istnieje:= reg.ReadString('test'); //wczesniej napisalem co prawda  ze sprawdza czy jest klucz ale zmienilem ze sprawdza wartosc klucza
    reg.Free;
if  Istnieje = 'jest' then
begin
   showmessage('dziala');
//ShellExecute(handle, 'open', 'program.exe', nil, nil, SW_SHOWNORMAL);
end
else
begin
  showmessage('nie dziala');
end;

Kod może mieć błędy ale chodzi o idee...
Pozdrawiam:)

0

Zgaduję, że nie pokazuje Ci się żaden komunikat (ewentualnie nie odpala program)? Jeśli tak, to dlatego, że usługa nie działa dla konkretnego, zalogowanego użytkownika (bo może działać bez zalogowania kogokolwiek). Zatem komunikat może i być, ale go nie widzisz; a co do programu - sprawdź w liście procesów, czy nie został odpalony.

0
Szczawik napisał(a)

Zgaduję, że nie pokazuje Ci się żaden komunikat (ewentualnie nie odpala program)? Jeśli tak, to dlatego, że usługa nie działa dla konkretnego, zalogowanego użytkownika (bo może działać bez zalogowania kogokolwiek). Zatem komunikat może i być, ale go nie widzisz; a co do programu - sprawdź w liście procesów, czy nie został odpalony.

Jejku, przepraszam bardzo, zapomniałem napisać że usługa po zainstalowaniu jest widoczna w usługach i w procesach(jako system, czyli wszystko ok), po uruchomieniu włącza się ok i działa, ale właśnie komunikatu nie widać, tak jak powiedziałeś...

Skoro mówisz że ona i tak może działać a ja nie widze komunikatu ale on jest, to można to ominąc, ja chcę jedynie aby włączał mi sie program tam gdzie jest komunikat "dziala"

0

To odpowiedź masz powyżej. Ogólnie robi się tak, że - jeśli usługa ma komunikować się z użytkownikiem - piszesz 2 programy, współpracujące przez IPC:

  • usługę, udostępniającą jakieś informacje lub narzędzia sterowania (działającą ciągle, bez względu czy ktoś jest zalogowany),
  • zwykłą aplikację klienta, której proces uruchamiany jest przez zalogowanego użytkownika, służącą do prezentowania tych informacji lub udostępniania sterowania (zamknięcie klienta zamyka stronę prezentacyjną, ale usługa działa nadal).

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