Je développe une application dans le cacao, qui doit vérifier si cette application est déjà en cours au démarrage. Si elle est déjà en cours d'exécution, je dois quitter la nouvelle instance. ..Cherche d'une solution parfaiteVérifiez si l'application est déjà en cours d'exécution
Répondre
Il semble que vous vouliez empêcher plusieurs instances de votre application de fonctionner en même temps. Normalement, les applications Cocoa n'autorisent pas l'exécution simultanée de plusieurs instances, vous n'avez donc pas besoin d'effectuer cette vérification. Existe-t-il une circonstance spécifique dans laquelle vous constatez qu'une application de cacao est utilisée simultanément?
En général, une façon cacao de résoudre ce problème est de lancer des applications dans NSWorkspace. Cela retourne un NSArray contenant un dictionnaire pour chaque application lancée. Vous pouvez parcourir le tableau pour voir si l'application que vous recherchez est déjà en cours d'exécution. Je vous conseille d'utiliser la valeur avec la clé NSApplicationBundleIdentifier qui aura une valeur comme "com.mycompany.myapp" plutôt que de chercher le nom. Si vous avez besoin de trouver l'identifiant du bundle pour une application, vous pouvez consulter son fichier info.plist dans le package de l'application.
Ma réponse ici n'est pas spécifique à la mise en œuvre de l'objet-c mais plutôt à une approche générale. Un système semblable à * nix, un démon créera normalement un fichier pid quelque part pour indiquer son existence. Si un démon n'autorise pas plusieurs instances, alors un autre feu de l'application devrait d'abord vérifier si un tel fichier pid existe, si c'est le cas, exister lui-même.
À noter que cette réponse ne s'applique qu'aux démons, pas aux applications réelles. De plus, il ne s'applique pas à un démon spécifique à Mac OS X; la méthode recommandée est de vérifier avec launchd à la place. http://developer.apple.com/technotes/tn2005/tn2083.html –
Bien que j'aie utilisé le mot «démon», le modèle de fichier pid ne doit pas être restreint pour un démon à instance unique. Dans les applications interactives de l'utilisateur, normalement, il est implémenté via .lockfile sous le profil des applications. Il sert presque le même but que le fichier pid du démon. Merci pour le lien. Launchd est recommandé et il semble que tout dépend de la façon de spécifier la configuration. Mais je suis toujours verrouillé pour voir où il est garanti d'empêcher le multi-instance de se lancer. – jimx
Vous pouvez popen() une instance de la commande ps et rechercher le nom de l'application. Si vous le trouvez, fermez le nouveau. peut-être pas le moyen le plus rapide, mais cela fonctionne :-)
- 1. Vérifiez si le son est en cours de lecture
- 2. Vérifiez si une bibliothèque DLL est déjà chargée? (Java)
- 3. Vérifiez si un proc stocké est en cours d'exécution?
- 4. Vérifiez si le service est en cours d'exécution dans WiX
- 5. Vérifiez si le service est en cours d'exécution?
- 6. Vérifiez si l'application IIS est en cours d'exécution sans l'exécuter
- 7. Déterminer si un script ruby est déjà en cours d'exécution
- 8. Vérifiez si le handle appartient au processus en cours?
- 9. Vérifiez si un thread Win32 est en cours d'exécution ou en mode suspendu
- 10. Comment gérer les notifications push si l'application est déjà en cours d'exécution?
- 11. Comment vérifier si l'application Qt GUI est déjà en cours d'exécution (sous Linux)?
- 12. Comment puis-je savoir si un processus est déjà en cours d'exécution avec C#?
- 13. Comment vérifier si une action du contrôleur est déjà en cours de redirection?
- 14. Comment savoir si une boucle de message MFC est déjà en cours d'exécution?
- 15. Vérifiez si Yahoo Messenger est installé
- 16. Vérifiez si ftp est complet ou non?
- 17. Vérifiez si Char est dans la gamme
- 18. Vérifiez si le paquet Python est installé
- 19. Vérifiez si une socket est déconnectée en C, sans select()
- 20. Vérifiez si une chaîne est codée en UTF-8
- 21. Vérifiez si le LButton de souris est en panne?
- 22. Vérifiez si une socket est connectée avant d'envoyer des données
- 23. Vérifiez si l'utilisateur du processus est un administrateur C++
- 24. si l'utilisateur est déjà connecté ou non?
- 25. Vérifiez si un répertoire existe en PHP
- 26. Détection si un fichier est déjà ouvert en javascript/hta
- 27. Vérifiez si l'objet est pas de type (! = Équivalent « EST ») - C#
- 28. Vérifiez si une valeur est dans une collection avec LINQ
- 29. ASP - Déterminer si le script en cours est en cours d'exécution comme un include
- 30. Vérifiez si l'e-mail existe
Même question que http://stackoverflow.com/questions/1081218/ideal-way-to-single-instance-apps-on-the-mac? – smorgan
Cette question identique a la meilleure réponse: [link] (http://stackoverflow.com/questions/684911/how-to-detect-whether-an-os-x-application-is-already-lancement) –