Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Kako da ubijem moju app a onda startujem drugu app?

[es] :: Pascal / Delphi / Kylix :: Kako da ubijem moju app a onda startujem drugu app?

[ Pregleda: 2381 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

.:Marvin:.
Taurunum

Član broj: 36626
Poruke: 94
91.143.212.*



Profil

icon Kako da ubijem moju app a onda startujem drugu app?19.10.2009. u 12:46 - pre 176 meseci
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... :(
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Kako da ubijem moju app a onda startujem drugu app?19.10.2009. u 15:12 - pre 176 meseci
> 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.
 
Odgovor na temu

Vladokv
Vladimir Knezevic
Svuda po gradu
Sopstvena Gewerbe
Berlin

Član broj: 31521
Poruke: 478
212.62.39.*

Sajt: goo.gl/ZbvDC


+16 Profil

icon Re: Kako da ubijem moju app a onda startujem drugu app?19.10.2009. u 15:28 - pre 176 meseci
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
 
Odgovor na temu

.:Marvin:.
Taurunum

Član broj: 36626
Poruke: 94
91.143.212.*



Profil

icon Re: Kako da ubijem moju app a onda startujem drugu app?20.10.2009. u 10:53 - pre 176 meseci
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
 
Odgovor na temu

tkaranovic
Tomislav Karanović
Beograd

Član broj: 220507
Poruke: 307



+18 Profil

icon Re: Kako da ubijem moju app a onda startujem drugu app?21.10.2009. u 03:07 - pre 176 meseci
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.
 
Odgovor na temu

.:Marvin:.
Taurunum

Član broj: 36626
Poruke: 94
91.143.212.*



Profil

icon Re: Kako da ubijem moju app a onda startujem drugu app?21.10.2009. u 09:11 - pre 176 meseci
@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 :)
 
Odgovor na temu

tkaranovic
Tomislav Karanović
Beograd

Član broj: 220507
Poruke: 307



+18 Profil

icon Re: Kako da ubijem moju app a onda startujem drugu app?21.10.2009. u 21:59 - pre 176 meseci
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.

 
Odgovor na temu

reiser

Član broj: 7895
Poruke: 2314



+102 Profil

icon Re: Kako da ubijem moju app a onda startujem drugu app?22.10.2009. u 08:20 - pre 176 meseci
Ili napravis for petlju u .bat fajlu koja vrsi praznu iteraciju od 1 do n i napravis delay na taj nacin :)
 
Odgovor na temu

tkaranovic
Tomislav Karanović
Beograd

Član broj: 220507
Poruke: 307



+18 Profil

icon Re: Kako da ubijem moju app a onda startujem drugu app?22.10.2009. u 15:04 - pre 176 meseci
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




 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Kako da ubijem moju app a onda startujem drugu app?

[ Pregleda: 2381 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.