[ Neznalica_sa_ugla @ 22.08.2010. 23:59 ] @
Pogledao sam malo po internetu , malo na našemu forumu ,al još me uvek muči ista briga .
Naime hocu da se program može pokrenuti samo jednom , lepo ...
Code:


  
  Mutex appMutex = new Mutex(true, Application.ProductName, out app_run);

    if (app_run)
 {




 }


ovo radi sasvim fino , avaj ... na nekoliko mesta imam potrebu da samu aplikaciju restartam ok, aplication.restart() ,

Problem je u tome što jedno od ovoga dvoga moram izbaciti , da bi aplikacije bila run_singl ne mogu je restartati . Da li neko ima ideju da se aplikacije klikom na ikonu može pokrenuti samo jednom , ali da se iznutra iz same aplikacije može restartati , ako sam bio dovoljno jasan ?? HVALA
[ mmix @ 23.08.2010. 08:37 ] @
Najprostije, napravi novi exe ciji jedini zadatak je da saceka oslobadjanje mutexa i da onda ponovo pokrene tvoj exe i ugasi se, onda kad hoces da restartujes glavnu applikaciju pozoves taj exe i ugasis se, mutex se oslobodi, mala aplikacija te ponovo pokrene i onda se ona ugasi.

[Ovu poruku je menjao mmix dana 23.08.2010. u 09:48 GMT+1]
[ dusty @ 23.08.2010. 09:14 ] @
Eksplicitno oslobodi mutex, ne ostavljaj ga GC-u. U statickoj klasi Program, posle Application.Run(....) pozovi metodu ReleaseMutex() tvog Mutex objekta.
[ mmix @ 23.08.2010. 09:37 ] @
U ovom slucaju nema funkcionalne potrebe (mada treba sa nekog stanovista cistog programiranja), kad se kontrola vrati iz main metode CLR uradi sweep svih objekata i finalizuje sve objekte markirane za finalizaciju plus garantovanu finalizaciju tzv critical finalizers (u sta spadaju wrapperi oko sistemskih handlova). U slucaju kad je aplikacija ubivena na silu oslobadjanje unmanaged resursa (kao sto je mutex handle) ce odraditi sam sistem.
[ Neznalica_sa_ugla @ 23.08.2010. 14:48 ] @
Ok , svima hvala , jadnostavno sam mutex , napravio vidljivim u čitavoj app i onda sam prije restarta stavio mutex.stop()
To za sada radi ok .(Zašto mi to juče nije palo na pamet ??? ,ne znam)
[ mmix @ 23.08.2010. 15:17 ] @
Samo pazljivo sa tim pristupom jer to tehnicki nije restart, u nekom periodu vremena imaces aktivne dve instance iste aplikacije, sto samo po sebi ne mora da bude problem ali ako si uveo single-instance iz nekog opravdanog razloga (npr exlusive lock na neki resurs) mozes lako da dodjes u situaciju da probas da ga alociras u novoj instanci pre nego je stara oslobodi.