[ .:Marvin:. @ 19.10.2009. 12:46 ] @
Problem je sledeci: treba da restartujem aplikaciju, i do sada sam koristio sledeci kod:

Code:

          AppName := PChar(Application.ExeName) ;
          ShellExecute(Handle,'open', AppName, nil, nil, SW_SHOW);
          Application.Terminate;


E sad, problem je sto aplikacija ne sme da bude dva puta startovana. Znaci u momentu kad ja kazem ShellExecute... blabla, on mi ponovo startuje aplikaciju, terminate jos nije zavrsio, tako da imam dve instance iste aplikacije, i onda mi iskoci greska jer to nije dozvoljeno. E sad, posto imamo jedno 10 aplikacija koje bi trebalo da imaju ovu funkcionalnost, ja menjam samo jedan unit koji to sve radi, tako da mi izmena main forme svake od ovih aplikacija nije opcija. Da li mogu nekako da kazem da mi saceka da prodje terminate, pa onda da pokrene novu, bas u momentu pre nego sto ubije postojecu app?

Nadam se da sam bio jasan... :(
[ savkic @ 19.10.2009. 15:12 ] @
> Problem je sledeci: treba da restartujem aplikaciju, i do sada sam koristio sledeci kod:

Napravi neku novi pomoćni program koji će to uraditi ili neki batch fajl u kome ćeš ubaciti pauzu.
[ Vladokv @ 19.10.2009. 15:28 ] @
Probaj da ti aplikacija napravi neki *.bat i pokrene. Nek se bat fajl dokonise malo , uradi taskkill prve aplikacije, pokrene drugu i obrise sebe

Code:

echo radi
taskkill /pid notepad.exe
start C:\Progra~2\Opera\opera.exe
del run.bat


neka je naziv bat fajla run.bat , mesto notepada prva aplikacija, a mesto opere druga aplikacija. Radi sigurno
[ .:Marvin:. @ 20.10.2009. 10:53 ] @
Odlicno! Bat file radi kao pesma.

Jedino sto sam timeout morao da resim 'na divljaka', tako sto pingujem nepostojeci IP sa timeout-om. Ako neko ima bolje resenje za timeout u bat fajlu, neka napise.

Hvala za ovo do sada
Pozdrav
[ tkaranovic @ 21.10.2009. 03:07 ] @
Mogao bi da se stavi parametar '/restart':

Code:

ShellExecute(Handle,'open', AppName, '/restart', nil, SW_SHOW);


a kod provere da li je otvorena prethodna instanca, kada je parametar restart, da pravi 10 pauza sa sleep(100) i proverama ima li prethodne instance. Odnosno da nova instanca sačeka da se prethodna zatvori pa da tek onda nastavi sa otvaranjem.

Može da se stavi i samo sleep(odgovarajuće_dužine_trajanja), kada je parametar restart, pre koda koji mora da bude samo u jednoj startovanoj aplikaciji.
[ .:Marvin:. @ 21.10.2009. 09:11 ] @
@tkaranovic

Tvoja ideja je svakako ispravnija... medjutim...

Ja nemam prava da menjam te aplikacije, nego samo ovaj neki zajednicki deo. Pa bih onda morao da jurim menadzere tih aplikacija da menjaju, i sve to bi se iskomplikovalo do besvesti. Resenje sa bat fajlom nije eleganci, ali radi i ne pita :)
[ tkaranovic @ 21.10.2009. 21:59 ] @
Umesto pinga, sa masm32 (ml exe kaže 6.14) se može napraviti sleep komanda za konzolu, recimo:

Code:

      .486
      .model flat, stdcall

      include C:\Programi\masm32\include\kernel32.inc
      includelib C:\Programi\masm32\lib\kernel32.lib
      
      Radi PROTO
      
.code

start:
    
   invoke Radi
  
   call ExitProcess
    
Radi proc
   LOCAL strng: DWORD
   LOCAL lup: BYTE
   LOCAL br: BYTE

    invoke GetCommandLine
    mov strng, eax
   
    invoke lstrlen, strng
    dec eax
    add strng, eax
    mov edx, strng
    mov ax, WORD PTR [edx]
    mov br, al
    .if br > 48  && br < 58
     mov lup, 49
     .REPEAT
      add lup, 1
      invoke Sleep, 1000
      mov dl, br
     .UNTIL lup > dl
    .endif
  
   ret
Radi endp

end start


dobija se exe fajl čija je veličina 1536, a ako se isti kompajlira iz VS2008 komandnog prompta (ml exe kaže 9.00..) dobije se fajl dužine 2048. Taj fajl se može pretvoriti u bite i onda kreirati i brisati slièno kao i bat fajl:

Code:


procedure TForm1.SleepClick(Sender: TObject);
const sleepfajl: array[0..1535] of byte = (
$4D,$5A,$90,$00,$03,$00,$00,$00,$04,$00,$00,$00,$FF,$FF,$00,$00,$B8,$00,$00,$00,$00,
$00,$00,$00,$40,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$B0,$00,$00,
$00,$0E,$1F,$BA,$0E,$00,$B4,$09,$CD,$21,$B8,$01,$4C,$CD,$21,$54,$68,$69,$73,$20,$70,
$72,$6F,$67,$72,$61,$6D,$20,$63,$61,$6E,$6E,$6F,$74,$20,$62,$65,$20,$72,$75,$6E,$20,
$69,$6E,$20,$44,$4F,$53,$20,$6D,$6F,$64,$65,$2E,$0D,$0D,$0A,$24,$00,$00,$00,$00,$00,
$00,$00,$5D,$17,$1D,$DB,$19,$76,$73,$88,$19,$76,$73,$88,$19,$76,$73,$88,$19,$76,$73,
$88,$1E,$76,$73,$88,$E5,$56,$61,$88,$18,$76,$73,$88,$52,$69,$63,$68,$19,$76,$73,$88,
$00,$00,$00,$00,$00,$00,$00,$00,$50,$45,$00,$00,$4C,$01,$02,$00,$3A,$2B,$DF,$4A,$00,
$00,$00,$00,$00,$00,$00,$00,$E0,$00,$0F,$01,$0B,$01,$05,$0C,$00,$02,$00,$00,$00,$02,
$00,$00,$00,$00,$00,$00,$00,$10,$00,$00,$00,$10,$00,$00,$00,$20,$00,$00,$00,$00,$40,
$00,$00,$10,$00,$00,$00,$02,$00,$00,$04,$00,$00,$00,$00,$00,$00,$00,$04,$00,$00,$00,
$00,$00,$00,$00,$00,$30,$00,$00,$00,$02,$00,$00,$00,$00,$00,$00,$03,$00,$00,$00,$00,
$00,$10,$00,$00,$10,$00,$00,$00,$00,$10,$00,$00,$10,$00,$00,$00,$00,$00,$00,$10,$00,
$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$14,$20,$00,$00,$28,$00,$00,$00,$00,$00,$00,
$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$20,$00,$00,$14,$00,$00,
$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
$00,$00,$00,$00,$2E,$74,$65,$78,$74,$00,$00,$00,$6E,$00,$00,$00,$00,$10,$00,$00,$00,
$02,$00,$00,$00,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$20,$00,
$00,$60,$2E,$72,$64,$61,$74,$61,$00,$00,$92,$00,$00,$00,$00,$20,$00,$00,$00,$02,$00,
$00,$00,$04,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$40,$00,$00,$40,
$00,$00,$00,$00,$00,$00,$00,$00,$E8,$05,$00,$00,$00,$E8,$4C,$00,$00,$00,$55,$8B,$EC,
$83,$C4,$F8,$E8,$47,$00,$00,$00,$89,$45,$FC,$FF,$75,$FC,$E8,$48,$00,$00,$00,$48,$01,
$45,$FC,$8B,$55,$FC,$66,$8B,$02,$88,$45,$FA,$80,$7D,$FA,$30,$76,$20,$80,$7D,$FA,$3A,
$73,$1A,$C6,$45,$FB,$31,$80,$45,$FB,$01,$68,$E8,$03,$00,$00,$E8,$17,$00,$00,$00,$8A,
$55,$FA,$38,$55,$FB,$76,$EA,$C9,$C3,$CC,$FF,$25,$0C,$20,$40,$00,$FF,$25,$00,$20,$40,
$00,$FF,$25,$04,$20,$40,$00,$FF,$25,$08,$20,$40,$00,$00,$00,$00,$00,$00,$00,$00,$00,
$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$5E,$20,$00,$00,$70,
$20,$00,$00,$78,$20,$00,$00,$50,$20,$00,$00,$00,$00,$00,$00,$3C,$20,$00,$00,$00,$00,
$00,$00,$00,$00,$00,$00,$84,$20,$00,$00,$00,$20,$00,$00,$00,$00,$00,$00,$00,$00,$00,
$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$5E,$20,$00,$00,$70,$20,$00,$00,
$78,$20,$00,$00,$50,$20,$00,$00,$00,$00,$00,$00,$75,$00,$45,$78,$69,$74,$50,$72,$6F,
$63,$65,$73,$73,$00,$B6,$00,$47,$65,$74,$43,$6F,$6D,$6D,$61,$6E,$64,$4C,$69,$6E,$65,
$41,$00,$73,$02,$53,$6C,$65,$65,$70,$00,$E2,$02,$6C,$73,$74,$72,$6C,$65,$6E,$41,$00,
$00,$4B,$45,$52,$4E,$45,$4C,$33,$32,$2E,$64,$6C,$6C,$00,$00,$00,$00,$00,$00,$00,$00,
$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
$00,$00,$00);
 var strim: TMemoryStream;
begin
 strim := TMemoryStream.Create;
 try
  strim.Write(sleepfajl, 1536);
  strim.SaveToFile('...\sleep.exe');
 finally
  strim.Free;
 end;
end;


Može da se startuje iz bat fajla za pravljenje pauze (1..9 sekundi):

sleep 1
ili
sleep 2
...

gde brojevi kao parametri predstavljaju sekunde.

[ reiser @ 22.10.2009. 08:20 ] @
Ili napravis for petlju u .bat fajlu koja vrsi praznu iteraciju od 1 do n i napravis delay na taj nacin :)
[ tkaranovic @ 22.10.2009. 15:04 ] @
Možda bi najsigurnije bilo da se iz .bat fajla proverava kada je aplikacija sasvim sigurno ugašena, recimo ovako:

Code:

:vrti
taskkill /im ImeAplikacije.exe
@if errorlevel 1 goto kraj
goto vrti
:kraj