Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Un seul process avec notification de demande d'ouverture [ Windows / Process ] (Yxion)

mercredi 14 novembre 2007 à 13:55:06 | Un seul process avec notification de demande d'ouverture

Yxion

Membre Club
Bonjour,

Mon titre n'est pas clair, et c'est pour cela que mes recherches ne donnent rien.

Je cherche à faire en sorte que mon application ne puisse se lancer qu'une fois, mais que lorsque que l'on tente de la lancer plus d'une fois, que l'application déjà lancer recoive un message pour lui signaler la demande.

Mon but est de pouvoir lancer une autre fenêtre principale, mais dans le même contexte(meme process) afin de limiter et partager certains objets en mémoire et éviter certains accès concurentiels sur des fichiers.

Merci pour votre aide


I love .net

mercredi 14 novembre 2007 à 15:19:58 | Re : Un seul process avec notification de demande d'ouverture

SharpMao

Membre Club
Hello,

Pour vérifier le lancement d'autres instances de l'application, regarde du côté de Process.GetProcessByName. Si le résultat contient plus de 1 process, c'est qu'il y en a déjà un en cours.

Pour dialoguer entre tes process, c'est un peu plus compliqué. Tu peux passer par des queues de messages (style MSMQ), ou faire du remoting, par exemple avec IPC.


Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)

mercredi 14 novembre 2007 à 19:36:56 | Re : Un seul process avec notification de demande d'ouverture
jeudi 15 novembre 2007 à 17:31:33 | Re : Un seul process avec notification de demande d'ouverture

Yxion

Membre Club
Le problème est que j'utilise un "ApplicationContext" et que je n'ai pas forcément de fenêtre principale active, j'ai juste un icone Systray.
J'ai mis un filtre de message dans ma classe héritant de ApplicationContext, ca marche tout très bien tant que j'ai un formulaire actif.

J'aimerais savoir s'il est possible d'utiliser un Handle globale au processus pour envoyer un message avec PostMessage
J'ai essayé ca (j'ai sans doute fait n'inporte quoi):

Process current = Process.GetCurrentProcess();
Process[] processCollection = Process.GetProcessesByName(current.ProcessName);
foreach (Process process in processCollection)
{
if (process.Handle == current.Handle) continue;
API.PostMessage(process.Handle, wmId, IntPtr.Zero, IntPtr.Zero);
}
Mais ca ne fonctionne pas, il y a jamais de process.Handle == current.Handle

I love .net

lundi 19 novembre 2007 à 16:35:48 | Re : Un seul process avec notification de demande d'ouverture

scortex84

Bonjour,
Si l'utilisateur n'est pas admin, on ne peut pas lister les processus.

Microsoft recommance l'utilisation des mutex.

Un exemple :

ajouter une classe :

class

InstanceUnique : IDisposable

{

privateMutex mMutex;

privatebool mMutexOwned;

///<summary>

/// Constructeur

///</summary>

///<param name="name">Nom de notre application</param>

public InstanceUnique(string name)

{

mMutex =

newMutex(false, name);

mMutexOwned =

false;

}

// Application déjà lancée ?

///<summary>

/// Application en cours.

///</summary>

///<returns>True si déjà en cours</returns>

publicbool IsRunning()

{

// Récupération du mutex

mMutexOwned = mMutex.WaitOne(0,

true);

return !(mMutexOwned);

}

///<summary>

/// Libération du mutex si il a été acquis

///</summary>

publicvoid Dispose()

{

if (mMutexOwned)

mMutex.ReleaseMutex();

}

}

Puis dans le main du programme :

[

STAThread]

staticvoid Main()

{

/// Si une autre application cours d'exécution crée un mutex ayant le même nom que celui de données ci-dessous,

/// cette dernière ne pourra plus se lancer. Choisissez un nom assez compliqué pour votre mutex.

using (InstanceUnique instanceUnique = newInstanceUnique("{unNomSuperComplique}"))

{

if (instanceUnique.IsRunning())

{

MessageBox.Show("L'application est déjà en cours d'execution.\n\n Fermez la fenêtre active puis re-essayez.", "Application");

}

else

{

Application.EnableVisualStyles();

Application.SetCompatibleTextRenderingDefault(false);

Application.Run(newfrmMain());

}

}

}


lundi 19 novembre 2007 à 16:58:07 | Re : Un seul process avec notification de demande d'ouverture

Yxion

Membre Club
Ca ne réponds pas à ma question, je le sais ca, et je m'en arrange, je veux juste communiquer un message sur autre chose que le pointeur du MainForm qui peut etre null


I love .net

lundi 19 novembre 2007 à 17:26:22 | Re : Un seul process avec notification de demande d'ouverture
lundi 19 novembre 2007 à 23:59:15 | Re : Un seul process avec notification de demande d'ouverture

ShareVB

salut,

tu pourrais avoir ta fenêtre principale cachée et utiliser les messages DDE pour être notifié des fichiers ouverts : http://www.csharpfr.com/codes/OUVRIR-DOCUMENTS-DANS-MEME-INSTANCE-APPLICATION-SANS-RELANCEMENT_41097.aspx

ShareVB



Cette discussion est classé dans : ouverture, lancer, process, demande, notification


Répondre à ce message

Sujets en rapport avec ce message

Lancer un fichier .bat pendant l'exécution [ par lagoelle ] Bonjour, Après recherche, dans le forum, je me tourne vers vous. Voici la question: < Lancer commande DOS dans un objet Process [ par Verrisan ] Bonjour tout le monde,Voilà j'aimerais lancé la comande Dos "move" qui permet de déplacer un fichier d'un répertoire à un autre dans objet de type Pro Lancer un programme a un moment précis [ par Teddysan ] Tout le monde connait le moyen de lancer un programme a partir du code:Process p = new Process();p.StartInfo = new ProcessStartInfo();p.StartInfo.File Lancer une application... [ par Yandroide ] Salut, Je voudrais pouvoir lancer une appli externe à mon application. Je réussi à le faire avec Process.start... Mon problème est de pouvoir afficher Projet Setup [ par Choumi1980 ] Bonjour tous le monde,je suis en train de créer un setup pour mon application. Lors du Setup je demande à l'utilisateur de m'indiquer où est-ce qu'il Automatiser un traitement avec process [ par Yandroide ] J'ai lancé une appli externe avec Process, l'appication doit faire une action, c'est une appli d'ocr, elle doit donc commencer l'ocr de quelques fichi recup le process qui utilise un fichier donné? [ par kach23 ] bonjour,je developpe en vb.net et c# et suis débutant.j'ai un petit bug lorsque je ve supprimer des fichiers.il me dit qu'ils sont utilisés par un aut Utilisation de process [ par Yandroide ] bjour,Je lance une application d'ocr et je lui passe des images en paramètres grace à process. J'utilise MonProcess.WaitForInputIdle() pour faire atte Lancer une application externe dans un mdi form [ par Tsu91 ] Bonjour,Je voudrais savori s'il est possible de lancer un prgramme windows, dans un projet c# dans un form MDI ?Je voudrais lancer cmd.exe par exemple Problème de Debugger [ par darkmomo ] HEllo World!!! Cedric Morsain, étudiant en informatique pour vous servir... ...Bonjour, J'ai un Gros Problème concernan


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,437 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.