Pomocy! Program blokuje restart win'a

0

[DELPHI]
Czy moglby mi ktos wyjasnic czemu jak moj program jest uruchomiony to windows nie chce sie zrestartowac, przy wylaczyniu procesow zatrzymuje sie na moim.? Dodam jeszcze ze program korzysta z dll'a w ktorym jest funkcja typu "keyhook", moze to ma zwiazek? Ale nie wiem jaki. ;-(
Pozdrawiam.

0

Bibliotekę ładuj dynamicznie i ją zwalniaj zaraz po zakończeniu użytkowania.

0

No niestety sprawdzilem, ale to nie biblioteka blokoju. Calkowicie ja usunalem, aleWindows nie chce sie zamykac, recznie moge usunac proces.
Nie mam pojecia co moze byc jeszcze przyczyna.
Moze juz ktos mial do czynienia z podobna sytuacja?
Dodam jeszcze ze jest to program z ukryta forma, takze widac go jedynie jako proces. ;-(

0

W FAQ masz opisane wykrywanie zamykania systemu no wykozystaj to i jak zrob cos takiego ze jak prog wykryje ze sys sie zamyka zrob Application.Terminate i powinno byc dobrze :)

0

Wykorzystalem, procedure przechwytujaca komunikat zamykania Wina, ale niestety, nie chce mi dzialac i nie reagauje na zamykanie, nie wiem czemu. Moze ma to zwiazek ze pracuje na XP?
Probowalem 2 rozwiazan:

  1. tak jak na FAQ
  2. rocedure WndProc(var Message: TMessage);override;
    .....
    procedure TForm1.WndProc(var Message: TMessage);
    begin
    if Message.Msg = WM_QUERYENDSESSION then
    begin
    ShowMessage('Zamykam program');
    end;
    inherited WndProc(Message);
    end;
    i niestety komunikat sie nie wyswietla przy zamykaniu wina, a program jak byl tak jest ! System nie ma zamiaru go zamknac!
    Sprobuje jeszcze wstawic Application.Terminate ale skoro ShowMessage sie nie wykonuje to Application.Terminate tez sie nie wykona.

POMOCY!

0

Wykorzystalem, procedure przechwytujaca komunikat zamykania Wina, ale niestety, nie chce mi dzialac i nie reagauje na zamykanie, nie wiem czemu. Moze ma to zwiazek ze pracuje na XP?
Probowalem 2 rozwiazan:

  1. tak jak na FAQ
  2. rocedure WndProc(var Message: TMessage);override;
    .....
    procedure TForm1.WndProc(var Message: TMessage);
    begin
    if Message.Msg = WM_QUERYENDSESSION then
    begin
    ShowMessage('Zamykam program');
    end;
    inherited WndProc(Message);
    end;
    i niestety komunikat sie nie wyswietla przy zamykaniu wina, a program jak byl tak jest ! System nie ma zamiaru go zamknac!
    Sprobuje jeszcze wstawic Application.Terminate ale skoro ShowMessage sie nie wykonuje to Application.Terminate tez sie nie wykona.

POMOCY!

A czy przypadkiem nie korzystasz z komponentu FTP z zakładki Fastnet?:)
Kevin Minetnick

0

Pochwalony!
Jeżeli dobrze skumałem to masz wąty do programu że nie wyświetla tabliczki jeżeli znajdzie komunikat wyłączenia kompa. Jeżeli tak to zdaje mi się iż dzieje się to dlatego że program, oraz inne wątki zostają unicestwione :P i nawet jeżeli wyświetliłby jakiegoś tam messagebox'a to zostanuie on od razu wyłączony, wraz z wyłączeniem programika.

0

Pochwalony!
Jeżeli dobrze skumałem to masz wąty do programu że nie wyświetla tabliczki jeżeli znajdzie komunikat wyłączenia kompa. Jeżeli tak to zdaje mi się iż dzieje się to dlatego że program, oraz inne wątki zostają unicestwione :P i nawet jeżeli wyświetliłby jakiegoś tam messagebox'a to zostanuie on od razu wyłączony, wraz z wyłączeniem programika.

Nie nie o to chodzi. Przy probie zamkniecia, wylogowania czy czegokolwiek program zostaje caly czas w pamieci i funkcjonuje bez zarzutu.
Z tego co doszedlem: nie odbiera komunikatow WM_QUERYENDSESSION.

Ale jezeli program nie bedzie mial ukrytej formy, to sie wylacza, ale musze potem ponowic probe zamknieca, zeby sie wylaczyl windows.
Glownie chodzi mi o to zeby jednak forma programu byla niewidoczna.
A co do komponentu FTP z FastNet'u to faktycznie uzywam.

CO to moze byc, gdzie jest blad (w FTP ?); :-(

0

Przepraszam, pomylka: uzywam server FTP z komponentu ICS

0

ja miałem coś podobnego ale tylko wtedy gdy aplikacja miała w zdarzeniu "onclosequery" wpisane canclose:=false;

0

Dodam jeszcze ze pod windowsem 98, zamyka sie normalnie razem z systemem. A ja mam windowsa XP i nie ma ochoty system wylaczyc moj program, chyba ze nie jest ukrywana forma, to wtedy go wylacza (ale restart musze ponowic zeby zamknac system). :-[

0

Jezeli uzywasz jakiegos komponenty do FTP to mzoe w tym czasie jestes polaczony i komp nie chce zamknac programu dopuki nie rozlaczy sie z serwerem Tak wiec moze jak sie zamyka win to moze rozlaczyc sie Hmm ale zapomnialem ze cos ci z tym wykrywaniem zamykania nie idzie No to juz nie wiem co moze byc :)

0

Dzieki za pomoc.
I od razu opisze co bylo:
Blad powodowal komponent NMSMTP z FastNetu.
Nie mam pojecia dokladnie czemu tak sie dzialo, ale najprawdopodobniej blokowal obsluge komunikatow. Wiec tylko recznie moglem zamknac program, windows nie byl w stanie, a komunikat wylapywany i odrzucany.
Taka jest moja teoria, ale by trzeba nad tym posiedziec. A ja jestem za leniwy.
I tak zajelo mi to pol dnia zeby dojsc.
Zrobilem kopie aplikacji i usuwalem pokolei elementy, az na koncu usunalem NMSMTP i wszystko gralo.
Ale tak mi sie wydawalo, bozostal jeszcze jeden oporny komponent: NMHTTP - tez z FastNetu.
Takze musialem zastapic je innymi.
I teraz pracuje nad tym, ale mam nadzieje ze bedzie dobrze.

Zaznacze jeszcze ze pod windowsem 98 te komponenty nie powodowaly problemu, tylko przy XP.
B-|

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