Autor Téma: Zamrznutí aplikace při hledání síťového disku  (Přečteno 636 krát)

Offline age.new

  • Plnoletý
  • ***
  • Příspěvků: 134
  • Karma: 0
Zdravím Delphi.cz komunitu,

narazil jsem na jeden velký problém, který způsobuje zamrznutí spuštěné aplikace psané v Delphi 7. Aplikace si při spuštění mapuje síťové disky pomocí bat souboru. V případě funkční sítě vše funguje jak má, pokud je ale cílový počítač nedostupný, dojde k vytuhnutí - patrně se čeká na nějaký timeout. Ukončení aplikace lze poté pouze jen přes správce procesů. Zde se poté začínají objevovat kopie cmd.exe, které již nezmizí.

To, že Windows jsou schopné vytuhnout při práci se sítí je známé. Lze výše uvedenému problému nějak předejít? Napadlo mě, zda neexistuje možnost, jak zavolat spuštění souboru tak, aby volající aplikace nečekala na odezvu - zde je patrně příčina problému.

Soubor se volá tímto příkazem:
Kód: Delphi [Vybrat]
  1. ShellExecute(Handle, 'open', PChar('DLL\StartNet.bat'), nil, PChar('DLL\'), SW_HIDE);

Díky za případné rady.
Alex.


Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2607
  • Karma: 133
    • Verze Delphi: D2007, XE3, DX10
Re:Zamrznutí aplikace při hledání síťového disku
« Odpověď #1 kdy: 07-03-2019, 09:20:20 »
Napadlo mě, zda neexistuje možnost, jak zavolat spuštění souboru tak, aby volající aplikace nečekala na odezvu - zde je patrně příčina problému.
Nevim, jestli bych sel touhle cestou. Ale pokud ano, tak bys to mel spoustet pomoci CreateProcess - pak mas nad tim kontrolu. Pokud pouzivas JCL, tak nekde tam jsou funkce  WinExec...., kde prinejmensim uvidis, jak se to dela, pokud je nebudes moct pouzit rovnou.

Offline age.new

  • Plnoletý
  • ***
  • Příspěvků: 134
  • Karma: 0
Re:Zamrznutí aplikace při hledání síťového disku
« Odpověď #2 kdy: 08-03-2019, 08:49:04 »
Děkuji za rady.

CreateProcess nepomohlo, stejně tak WinExec. Aplikace se pak chová podivně a nejde např. regulérně ukončit (zůstane viset bez odezvy). Asi jedinou možností bude separátní mini aplikace (třeba i bez formů), které se postará o oddělené volání souboru StartNet.bat s Net Use příkazem. Dá se poté i celkem jednoduše zrušit, popřípadě hlídat zda nedošlo k opakovanému volání atd...

Offline vandrovnik

  • Guru
  • *****
  • Příspěvků: 797
  • Karma: 43
    • Verze Delphi: 10.3
Re:Zamrznutí aplikace při hledání síťového disku
« Odpověď #3 kdy: 08-03-2019, 22:53:07 »
A je nezbytně nutné používat ty mapované disky? Jestli není lepší přímo UNC cesta...

Offline Peťo

  • Nováček
  • *
  • Příspěvků: 36
  • Karma: 3
    • Verze Delphi: 7, 5, 4
Re:Zamrznutí aplikace při hledání síťového disku
« Odpověď #4 kdy: 09-03-2019, 09:19:38 »
A je nezbytně nutné používat ty mapované disky? Jestli není lepší přímo UNC cesta...

Tiež si myslím, že mapovanie diskov bolo nutné v čase MS-DOS aplikácií, ktoré nepracovali so sieťovými cestami alebo mali problém aj s príliš dlhou lokálnou cestou.

Pri použití UNC cesty sa vyhne prasačinám s bat súbormi, ale problém zostane rovnaký - pri nedostupnosti siete program vytuhne úplne rovnako.

Offline raul

  • Hrdina
  • ****
  • Příspěvků: 269
  • Karma: 15
    • Verze Delphi: FPC :D
Re:Zamrznutí aplikace při hledání síťového disku
« Odpověď #5 kdy: 09-03-2019, 09:27:30 »
Pingni si cilovy komp a podle toho pust pripojeni. To vse v separatnim vlakne.
Lazarus 1.6.3:), FPC, Intel/Arm, Windows/Linux

Offline age.new

  • Plnoletý
  • ***
  • Příspěvků: 134
  • Karma: 0
Re:Zamrznutí aplikace při hledání síťového disku
« Odpověď #6 kdy: 13-03-2019, 07:21:11 »
Ping je dobrý nápad. Tímto řešením se asi vydám.