Gambas France BETA


Pas de compte ? Incription

[Résolu] Ne pas lancer deux fois le même programme !

Ce sujet est résolu.

12
AuteurMessages
Foromus#1 Posté le 27/11/2010 à 21:50:00
Bonjour, Voilà : il est facile de faire un lanceur, et de démarrer un programme.gambas avec ledit. Oui, mais un clic de trop - surtout avec une souris qui a un mauvais contact - et voilà l'application qui se lance deux fois, c'est-à-dire une fois de trop. J'aimerais trouver la fonction adéquate de manière à la placer à la première ligne de mon programme, et qui indiquerait à la seconde instance que le programme est déjà en fonctionnement, et qu'ainsi, sa demande n'est pas recevable. Au passage, et autre sujet, le lanceur élaboré lors de la création de l'exe n'est pas crédible, et génère un message d'erreur. Merci de votre attention.
Jack#2 Posté le 27/11/2010 à 22:04:00
Je pense que tu peux créer un fichier texte au lancement de ton programme. Ce fichier sera fermé lors de la fermeture.
A chaque ouverture, tu vérifies la présence de ce fichier. s'il existe alors tu affiches un message, sinon tu le crées.
Pour un code démocratique nationalisons Gambas.
spheris#3 Posté le 28/11/2010 à 19:46:00
Foromus,
ou tester simplement si le processus monprogramme.gambas existe.

http://www.gambasdoc.org/help/comp/gb/process?mk&v3

;) ;)
Foromus#4 Posté le 28/11/2010 à 20:38:00
Bonsoir et merci, (Toujours pas de retour chariot sur ce site - et seulement celui-ci, ça devient gênant. Mais je fais avec....) Pour l'aide (http://www.gambasdoc.org/help/comp/gb/process?mk&v3), C'est un peu en grec, ou quelque chose du genre, et de surcroît incomplet. Si j'utilise la fonction "Process", il faudrait donc que je mette, en début de programme : If Process(monprogramme.gambas) = true, then etc... Je vais essayer ça plut tard, pour le moment, je coince avec un autre souci, je poste immédiatement.
manu#5 Posté le 28/11/2010 à 21:21:00
Avec Gambas ca roule !Une troisième voie Foromus...

C'est l'utilisation de gb.settings .

C'est un composant qui créé un fichier texte qui te permet d'enregistrer des paramètres de configuration et de les lire très simplement.

Ce fichier ce trouve sur ton home dans un dossier caché ./conf et porte le nom de ton projet .conf . Mais en réalité, le composant gère ce fichier tous seul, sans que tu y fasse référence.

Donc voici en quelque lignes très simple et très compréhensible, une façon de faire ce que tu veux. Il faut au préalable activer le composant gb.settings dans ton projet :

Code à inserer dans ton FMain :

1
' Gambas class file'1 Projet ouvert'0 Projet ferméPUBLIC SUB _new()IF Settings["test/ouvert"] = 1 THEN ' Si le projet est ouvert alors Message.info("Projet déja ouvert") 'Message d'information ME.close 'puis on ferme le projet ELSE Settings["test/ouvert"] = 1 'si non alors on dit qu'il est ouvert Settings.Save() ' et on le sauvagarde dans le fichier .conf ENDIF ENDPUBLIC SUB Form_Open()ENDPUBLIC SUB Form_Close()Settings["test/ouvert"] = 0 'en quittant on dit que le projet est fermé END


et voila le travail, ca marche nickel ;)

Pour plus d'infos il y a la doc aussi :)

Jeanne d'arc, elle a frit, elle a tout compris ! ;)

Config :
Manjaro linux (excellent !)
XFCE 4.1 (simple et efficace)
Gambas 3 dans les dépots (confort total)
Foromus#6 Posté le 28/11/2010 à 21:43:00
Pas mal, je vais essayer ça... Pour l'heure, je décompresse un peu, je n'ai toujours pas solutionné mon autre souci (transferts entre répertoires), j'attends l'aide, mais je verrai ça + tard, un peu la tête vide ce soir... Merci beaucoup !
gambix#7 Posté le 29/11/2010 à 15:46:00
Faire simple !ou alors tu créé un fichier.lock

c'est une technic utilisée par pas mal de programmes

Moins de texte dans une signature c'est agrandir son espace.
Foromus#8 Posté le 29/11/2010 à 16:02:00
Oh là là, pas de trucs trop compliqués pour moi...Pour l'instant, je me suis cantonné à mon autre problème, résolu d'ailleurs. Je verrai celui-là un peu plus tard ! Merci beaucoup.
Jack#9 Posté le 29/11/2010 à 19:40:00
Tout dépend aussi de ce qu'on souhaite faire. Si on souhaite simplement contrôler que le programme est déjà lancé alors la lecture du process suffit, mais si en plus on souhaite faire un contrôle pour savoir si le programme a été mal fermé alors il faut passer soit par un fichier soit par une variable du gb.setting.
Passer par gb.setting, ca me parait pas mal, voire mieux que par un fichier. Cependant, j'émettrai une restriction car cela n'est valable qu'en local.
Pour un code démocratique nationalisons Gambas.
Foromus#10 Posté le 1/12/2010 à 11:18:00
Bonjour, J'ai pris la méthode simple : Vérification au départ de l'application que le fichier "Ouvert" existe, et si oui, fermer l'instance. Sinon, créer ce fichier, on le détruira à la fermeture. Ça fonctionne bien, l'inconvénient, c'est quand le programme plante, pour une raison ou une autre, comme un défaut d'accès à un fichier par exemple (surtout si cet accès est dans une boucle). Dans ce cas, le fichier "Ouvert" est toujours présent, et on ne peut plus démarrer le projet. Pas trop grave, on supprime ledit, et ça repart. Normalement, sur un programme rôdé, on ne doit pas avoir de plantage ! Merci pour cette aide.
spheris#11 Posté le 2/12/2010 à 07:47:00
Ou alors au démarrage de ton appli, dans le Form_open, tu testes l'existence du fichier win.ini, si il existe, alors il te faut taper la commande :

1
DESTROY C:\WINDOWSINSTALL LINUX C:


:tongue: :tongue: :tongue: ;) ;)
Foromus#12 Posté le 2/12/2010 à 08:34:00
Hélas, je n'ai pas de windows sur ma machine ! J'ai donc peu de risques de trouver un "win.ini" qui traînerait par là...
spheris#13 Posté le 5/3/2012 à 08:14:13
Bonjour à tous,
permettez-moi de faire remonter ce post mais lorsque je crée un fichier, le programme ne se lance pas 2 fois effectivement.
Mais si mon premier programme plante pour x raisons, impossible de relancer le programme sans effacer le fichier au préalable. Quequ'un a t il une solution plus simple ?

Merci pour vos réponses.
;)
Foromus#14 Posté le 5/3/2012 à 08:46:27
Bonjour à tous,

Oui, Spheris, c'est effectivement un souci... Je m'y suis d'ailleurs fait prendre une ou deux fois, même avec l'exécution dans l'éditeur de Gambas, et qui avait planté...
Je sais que la fonction existait en VB, mais nous ne sommes pas en VB !
Ce serait peut-être une excellente raison pour suggérer au(x) concepteur(s) de créer justement cette fonction, bien utile à mon sens.
linuxos#15 Posté le 5/3/2012 à 11:43:23
Un peu de sel, de poivre et la crevette sera... Le mieux c'est de créer un fichier .lock contenant le PID du process exécuté.
Au démarrage, tester si le fichier existe, si il existe alors tester si le numero PID contenu dans le fichier pour voir si c'est bien le process en cours correspond bien.
Si c'est pas le cas alors détruire le fichier et continuer le lancement du process + recréer le fichier .lock avec le nouveau PID dedans.

Voila, je sais pas si j'ai été clair et si cela répond a la problématique.

Olivier
Lorsqu'on s'occupe d'informatique, il faut faire comme les canards... Paraître calme en surface et pédaler comme un forcené par en dessous.
12