begin process at 2012 02 11 18:24:53
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C#

 > 

Windows

 > 

Process

 > 

Un seul process avec notification de demande d'ouverture


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Un seul process avec notification de demande d'ouverture

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ée 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 process.MainWindowHandle : exception si plusieurs process [ par keerigan ] Bonjour, Je veux pouvoir lancer IE puis realiser une action et enfin le fermer. J'utilise ca pour lancer IE. process = Process.Start("IExplore"); lancer.exe automatiquement a partir d'un clé USB [ par Queen23 ] bonjour je cherche comment lancer une application en c# .exe automatiquement quant la clé est détectée lancer une commande dos et l'exécuter en arrière plan [ par GhostMoon ] j'ai un problem avec le code c# j'arrive pas à lancer une commande dos en arrière plan ??? par exemple la commande (cd C:\Program Files\nomdeprogra lancer des commande sql à partir du cmd en c# [ par GhostMoon ] slt tout le monde!!! je veux lancer des requete sql à partir du cmd en arrière plan mais j'arrive pas à lancer les requetes sqls !!!! voila mon code : lancer CMD en tant que administrateur en c# [ par GhostMoon ] Bonsoir tout le monde s'il vous plais vous pouvez m'aider j'ai un problem je veux lancer cmd a partir de mon application en c# mais en tant que admini Lancer form une seule fois. [ par SegmaMic ] Bonjour à tous, J'ai créé une application et je souhaiterais qu'elle ne s'ouvre qu'une fois... Je m'explique : Pour l'instant, si je clique 2x sur l'


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 3,198 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales