IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Outils Delphi Discussion :

[Inno Setup] Détection de processus en cours


Sujet :

Outils Delphi

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2012
    Messages : 15
    Points : 6
    Points
    6
    Par défaut [Inno Setup] Détection de processus en cours
    Bonjour,

    Je cherche un moyen de détecter des processus en cours d’exécution qui pourrait perturber le bon déroulement de l'installation. J'ai bien compris qu'il fallait utiliser des "Mutex" par contre je ne bite rien de ce qu'il faut faire pour parvenir à :
    "Si processus MonProcessus01 ou MonProcessus02 alors demander à l'utilisateur de les fermer"

    Sur la documentation officielle ça parle de Delphi, C ou VB, je ne sais même pas pourquoi et AppMutex = MonProcessus dans [Setup] n'a aucun effet sans compter que je peux en mettre qu'un seul. Je ne vois pas non plus comment utiliser la procédure CreateMutex, la doc indiquant seulement que ça sert à créer des Mutex . . .
    Habituellement je trouve ce que je veux dans cette documentation mais là je sèche.

    J'ai également trouvé ceci sur un forum :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    var HandleMutex : THandle;
     
    function IsRunning : Boolean;
      begin
      result := true;
      SetLastError(NO_ERROR);
      if OpenMutex(MUTEX_ALL_ACCESS,false,pChar('MonMtx'))<>0 then exit;
      HandleMutex  := CreateMutex(Nil,true,pChar('MonMtx'));
      if HandleMutex = 0 then ShowMessage('Erreur de Mutex')
                                  else result := false;
    end;
     
    ...
     
    procedure TForm1.FormDestroy(Sender: TObject);
      begin
      if HandleMutex <> 0 then ReleaseMutex(HandleMutex);
    end;
     
     
    Utilisation :
     
    procedure TForm1.FormCreate(Sender: TObject);
      begin
      if IsRunning then [désactiver l'option "mise à jour"];
    end;
    Mais j'ai le droit à 2 messages d'erreurs par ligne à l'exécution.

    Merci d'avance à tout ceux qui pourront m'apporter leurs lumières. Un bel exemple concret me ferait grand plaisir

  2. #2
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Bonjour,

    En préambule, il faut que l'application dont on veut détecter la présence en mémoire dispose du même Mutex que le programme d'installation.
    Si l'installation peut s'appliquer à des serveurs d'applications (TSE, citrix), le Mutex doit être doté du préfixe Global, dans le cas contraire, le Mutex se limite à la session courante...

    Plus d'explications ici :
    HOWTO: Detect instances running in any user session with AppMutex
    Philippe.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2012
    Messages : 15
    Points : 6
    Points
    6
    Par défaut
    Merci pour cette page je n'avais pas mis la main dessus.
    Il n'est pas du tout question de serveur. En fait j'ai sans doute oublié de préciser à quoi tout cela était destiné :
    Je développe un mod pour un jeu. Je voudrais d'une part vérifier que le jeu ou l'éditeur de niveau ne sont pas en cours d’exécution pour installer le mod et d'autre part pour les mises à jour, vérifier que le launcher du mod ne tourne pas non plus.

    J'ai fini par aller sur Wikipédia pour essayer de saisir ce que voulais dire Mutex. C'est une primitive de synchronisation pour éviter le partage de ressources simultanées . . .
    Dans l'exemple proposé je vois plein de MutexName mais je ne vois pas par quelle valeur je suis sensé remplacer.
    Où est-ce que j'indique le nom des processus, ceux qui apparaissent dans le gestionnaire de tâches ?

    J'arrive pas à me dégager de l'idée :
    Si jeu.exe OU editeur.exe OU launcher.exe Alors message d'avertissement ET bloquer l'installation

    Je me dit que j'ai peut-être plus vite fait de mettre un bout d'application en VB.NET à exécuter en début d'install car ça je sais le coder.

  4. #4
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Bonjour,
    Citation Envoyé par Syrius_Märx Voir le message
    Il n'est pas du tout question de serveur.
    Ne sachant pas à quoi cela était destiné, j'ai préféré rappeler cette règle pour le nommage des mutex...

    Citation Envoyé par Syrius_Märx Voir le message
    Je développe un mod pour un jeu. Je voudrais d'une part vérifier que le jeu ou l'éditeur de niveau ne sont pas en cours d’exécution pour installer le mod et d'autre part pour les mises à jour, vérifier que le launcher du mod ne tourne pas non plus.
    C'est alors relativement simple, si vous compilez le jeu en question ou que vous savez qu'il utilise un mutex; vous connaissez alors le nom du mutex.

    Côté Innosetup, il suffit de préciser dans le script de nom du Mutex :
    Côté application dans le cas où vous la compilez (je prends Delphi pour l'exemple), on a :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    program MonJeu;
     
    uses
      Windows,
      Dialogs,
      Forms,
      UJeux in 'UJeux.pas' {MaFormduJeux};
     
    {$R *.res}
     
    var
      MutexHandle : THandle;
    begin
      MutexHandle := CreateMutex(nil, True, 'MonMutex');
      if (MutexHandle = 0) or
         (GetLastError = ERROR_ALREADY_EXISTS) then
      begin
        // Signaler une erreur ou la pré-existence du Mutex
        // Ne pas lancer le jeu
        MessageDlg('Jeu déjà lancé !', mtWarning, [mbAbort], 0);
      end
      else
      begin
        Application.Initialize;
        Application.CreateForm(TMaFormduJeux, MaFormduJeux);
        Application.Run;
        // Libérer le Mutex
        if MutexHandle <> 0 then
          CloseHandle(MutexHandle);
      end;
    end.
    Si vous n'avez pas accès au source du jeu ou ne connaissez pas le Mutex qu'il pourrait utiliser, il va falloir se tourner vers d'autres méthodes de détections : le nom du processus, le nom d'une fenêtre active, etc, etc.
    Philippe.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2012
    Messages : 15
    Points : 6
    Points
    6
    Par défaut
    Juste je précise que l'installateur consiste à ajouter ou modifier des fichiers dans le répertoire du jeu dont le launcher du mod que j'ai développé en VB.NET. En revanche le jeu en question est développé par EA Games et je n'installe absolument pas l'exe du jeu ou de son éditeur. Mais je connais le nom des processus correspondant (= nom du Mutex ?).

    Donc en résumé il y a le launcher qui est compris dans l'install mais le jeu et l'éditeur sont des ressources externes.

    Par contre il y a quelque chose que je ne saisie toujours pas. Le language de la section [Code] de Inno Setup c'est bien du Pascal ?
    Pourquoi dès qu'on parle de Mutex je vois du Delphi voir du C ou VB ?

    En fait je crois que je viens de comprendre l'élément principal de cette affaire :
    Dans Inno Setup il suffit de mettre "AppMutex = MonMutex" et c'est dans mon launcheur que je dois créer l'instance de Mutex. Du coup je dois également découvrir le non du Mutex créer par le jeu et l’éditeur.

    Si c'est pas ça je comprend toujours pas. Il doit vraiment y avoir un élément bête qui m'échappe pour saisir le fonctionnement des Mutex.

  6. #6
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Un mutex est un objet qui sert à la synchronisation. A un instant donné, il ne peut être possédé que par un seul processus, d'où son nom : Mut(ual)ex(clusion).
    Un mutex est défini par son nom
    Vous pouvez implémentez un mutex dans votre lanceur, et définir le même dans l'installeur de votre lanceur.

    Pour VB, l'aide de Innosetup précise :
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Visual Basic (submitted by Peter Young):
    'Place in Declarations section:
    Private Declare Function CreateMutex Lib "kernel32" _
            Alias "CreateMutexA" _
           (ByVal lpMutexAttributes As Long, _
            ByVal bInitialOwner As Long, _
            ByVal lpName As String) As Long
     
    'Place in startup code (Form_Load or Sub Main):
    CreateMutex 0&, 0&, "MyProgramsMutexName"
    Pour l'installeur, on aura dans le script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AppMutex=MyProgramsMutexName
    Concernant le jeu de EA Games, il faudra pour s'assurer qu'il n'est pas lancé ne pas détecter sa présence dans la liste des processus.

    Voici un exemple en C# (cela doit s'adapter à VB.Net assez rapidement)
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    //Namespaces we need to use
    using System.Diagnostics;
     
    public bool IsProcessOpen(string name)
    {
        //here we're going to get a list of all running processes on
        //the computer
        foreach (Process clsProcess in Process.GetProcesses()) {
            //now we're going to see if any of the running processes
            //match the currently running processes. Be sure to not
            //add the .exe to the name you provide, i.e: NOTEPAD,
            //not NOTEPAD.EXE or false is always returned even if
            //notepad is running.
            //Remember, if you have the process running more than once, 
            //say IE open 4 times the loop thr way it is now will close all 4,
            //if you want it to just close the first one it finds
            //then add a return; after the Kill
            if (clsProcess.ProcessName.Contains(name))
            {
                //if the process is found to be running then we
                //return a true
                return true;
            }
        }
        //otherwise we return a false
        return false;
    }
    Citation Envoyé par Syrius_Märx Voir le message
    Par contre il y a quelque chose que je ne saisie toujours pas. Le language de la section [Code] de Inno Setup c'est bien du Pascal ?
    Pourquoi dès qu'on parle de Mutex je vois du Delphi voir du C ou VB ?
    En fait InnoSetup est programmé en Delphi et utilise pour la partie "scripting" du pascal objet inspiré du pascal Delphi (RemObjects pour la partie script)...
    Ce code dynamique est à différencier toutefois du script de base qu'utilise Innosetup pour bâtir un programme d'installation...
    Citation Envoyé par Syrius_Märx Voir le message
    Dans Inno Setup il suffit de mettre "AppMutex = MonMutex" et c'est dans mon launcheur que je dois créer l'instance de Mutex.
    Gagné !
    Citation Envoyé par Syrius_Märx Voir le message
    Du coup je dois également découvrir le non du Mutex créer par le jeu et l’éditeur.
    Rien ne dit que le jeu utilise un voire plusieurs mutex... ou une autre méthode pour s'assurer qu'un fichier est disponible, en vérifiant les verrous qui sont posés sur le fichier visé.
    Philippe.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2012
    Messages : 15
    Points : 6
    Points
    6
    Par défaut
    C'est bon j'ai saisi, je vois comment l'intégrer, du moins pour la partie launcher mais c'est le plus important. Je testerais ça ce soir.

    Pour la partie du jeu EA Games, cela présuppose du coup de développer un petit programme a exécuter en amont de l'installateur, juste après la sélection de langues. L'intégrer au launcher ne peut pas marcher dans le cadre d'une première installation puisque celui n'est justement pas encore installé. Oui je sais c'est un peu tordu.

    Bref en attendant merci pour toutes ces explications. Si mon test se montre positif j'oublierais pas de cocher résolu

  8. #8
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Citation Envoyé par Syrius_Märx Voir le message
    Pour la partie du jeu EA Games, cela présuppose du coup de développer un petit programme a exécuter en amont de l'installateur, juste après la sélection de langues. L'intégrer au launcher ne peut pas marcher dans le cadre d'une première installation puisque celui n'est justement pas encore installé. Oui je sais c'est un peu tordu.
    Pas forcément, la détection du processus peut se faire :
    • en étant pleinement intégré dans le setup (via du code scripting façon Delphi). L'aide d'Innosetup fournit beaucoup d'éléments...
    • via un petit programme tiers inclus dans le setup qui va être exécuté au démarrage et dont on va tester le résultat retourné
    • de l'extérieur

    Solutions de la + à la - élégante...
    Philippe.

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2012
    Messages : 15
    Points : 6
    Points
    6
    Par défaut
    Malheureusement ça ne fonctionne pas. J'ai essayé deux méthodes pour créer un Mutex à partir du Laucnher (celle que vous m'avez montré et celle-ci)
    J'ai tenté plusieurs noms de Mutex en faisant bien attention à la case.

    Lorsque que le launcher est lancé puis que je démarre une mise à jour, celle-ci s'opère sans encombre jusqu'au message d'erreur indiquant qu'on ne peut pas remplacé le fichier launcher.exe.
    Si le Mutex avait fonctionné, j'aurais eu droit à un message dès le début demandant à l'utilisateur de fermer le launcher, c'est bien ainsi que ça doit fonctionner ?

    Existe-t-il un moyen de vérifier la présence de Mutex ?

  10. #10
    Membre expérimenté
    Avatar de ouiouioui
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2006
    Messages
    984
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 984
    Points : 1 418
    Points
    1 418
    Par défaut
    Il y a sa aussi pour spécifier les programmes à fermer avant une mise à jour
    http://www.vincenzo.net/isxkb/index...._use_extension

    car niveau mutex si le jeu en a pas t'est pas prêt d'y arriver.

    pour regarder les mutex utilisé par un processus tu peux utiliser Process explorer de sysinternals (ctrl + h pour voir les handles)
    exemple le mutex que inno setup crée et utilise dans son script d'installation est "InnoSetupCompilerAppMutex" voir capture.
    Images attachées Images attachées  
    Il existe 3 sortes de gens: ceux qui savent compter et ceux qui ne savent pas.

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2012
    Messages : 15
    Points : 6
    Points
    6
    Par défaut
    Très intéressant tout ça !
    Grâce à Process Explorer j'ai trouvé un mMutex pour le jeu et ça marche de paire avec Inno Setup, j'ai bien un message d'avertissement lorsqu'il est lancé. Cependant le message est plus que tordu puisqu'il dit en gros que l'installateur a détecté l'installateur (lui-même) et qu'il demande à fermer l'installateur pour continuer l'installation
    Pourtant c'est bien en fonction du jeu que le message apparaît et fait blocus.

    J'ai également pu vérifier que mon launcher VB.NET créait bien un Mutex mais seulement avec la méthode 2 (la méthode 1 n'a aucune effet). Mais là je suis juste dépité, en faisant un copier/coller du mutex dans Inno Setup, ça ne marche pas alors que ça allait très bien avec un copier/coller de celui du jeu

  12. #12
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 695
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 695
    Points : 13 133
    Points
    13 133
    Par défaut
    J'ai l'impression que tu n'as pas compris comment fonctionnent les mutex.
    Il serait maintenant intéressant que tu nous montres un peu tes scripts IS et VB (uniquement les parties relatives au mutex bien sûr)

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2012
    Messages : 15
    Points : 6
    Points
    6
    Par défaut
    Et bien justement je pensais que grâce à Ph. B. & ouiouioui j'avais fini par comprendre . . .

    Source Inno Setup :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AppMutex=cnc-sgu-launcher
    Source VB.NET fonctionnel :
    Code VB : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
           Dim m As Threading.Mutex = Nothing
     
            ' The mutex does not exist, so create it.
     
            ' Create an access control list (ACL) that denies the
            ' current user the right to enter or release the 
            ' mutex, but allows the right to read and change
            ' security information for the mutex.
            Const mutexName As String = "cnc-sgu-launcher"
            Dim mutexWasCreated As Boolean '
            Dim user As String = Environment.UserDomainName _
                & "\" & Environment.UserName
            Dim mSec As New MutexSecurity()
     
            Dim rule As New MutexAccessRule(user, _
                MutexRights.Synchronize Or MutexRights.Modify, _
                AccessControlType.Deny)
            mSec.AddAccessRule(rule)
     
            rule = New MutexAccessRule(user, _
                MutexRights.ReadPermissions Or _
                MutexRights.ChangePermissions, _
                AccessControlType.Allow)
            mSec.AddAccessRule(rule)
     
            'Create a Mutex object that represents the system
            'mutex named by the constant 'mutexName', with
            'initial ownership for this thread, and with the
            'specified security access. The Boolean value that 
            'indicates creation of the underlying system object
            'is placed in mutexWasCreated.
            '
            m = New Mutex(True, mutexName, mutexWasCreated, mSec)

    Source VB.NET qui n'a aucun effet (j'entends par là qu'avec Processus Explorer aucun Mutex n'apparaît avec le nom indiqué)
    Code VB : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        Private Declare Function CreateMutex Lib "kernel32" _
                Alias "CreateMutexA" _
               (ByVal lpMutexAttributes As Long, _
                ByVal bInitialOwner As Long, _
                ByVal lpName As String) As Long
     
     
    ' dans la fenêtre principal 
            CreateMutex(0&, 0&, "cnc-sgu-launcher")


    Je peux remplacer "cnc-sgu-launcher" par n'importe quoi (dans IS et VB) ça ne changera rien. Par contre si je met "685EAFF2-3216-4265-B047-251C5F4B82F3" dans IS, une clé qui correspond au jeu, là ça marche, j'ai bien un message qui m'avertis qu'une application est déjà en cours et demande de la fermer.

    Seulement le message est :
    "Setup has detected that CnC SGU Update is currently running. Please close all instance of it now, then click OK to continue or cancel to exit."

    CnC SGU Update étant le Setup que je lance il me paraît logique qu'il se détecte lui-même en cours d’exécution.
    Faut-il changer un custom message quelque part ?

  14. #14
    Membre expérimenté
    Avatar de ouiouioui
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2006
    Messages
    984
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 984
    Points : 1 418
    Points
    1 418
    Par défaut
    utilise pas appmutex

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    [custommessages]
    appisrunning=app 1 or app 2 is running, close it
     
    [code]
    function InitializeSetup(): Boolean;
    begin               
      Result := False;                     
     
      while CheckForMutexes('appmutex1,appmutex2') do
        if MsgBox(ExpandConstant('cm:appisrunning'), mbWarning,  MB_OKCANCEL) = IDCANCEL then
          Exit;
     
      Result := True;
    end;
    Il existe 3 sortes de gens: ceux qui savent compter et ceux qui ne savent pas.

  15. #15
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2012
    Messages : 15
    Points : 6
    Points
    6
    Par défaut
    Merci pour cette méthode, c'est carrément plus souple. Ça fonctionne bien avec le Mutex du jeu.
    Cependant j'ai le même problème avec celui du launcher. En y regardant de plus prêt avec Process Explorer, j'ai remarqué que le mutex du launcher ne dure que quelques secondes. De plus pour le jeu, le paramètre Held est FALSE et dans l'onglet sécurité tout est autorisé tandis que pour le launcher Held vaut TRUE et tout est refusé.

    Donc au final la vraie question est comment créer un mutex viable en VB.NET ?
    Je connais une méthode qui marche pas, une autre qui marche qu'à moitié, j'aimerais maintenant connaître celle qui marche bien

  16. #16
    Membre expérimenté
    Avatar de ouiouioui
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2006
    Messages
    984
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 984
    Points : 1 418
    Points
    1 418
    Par défaut
    ah sa ! Fallait utiliser Delphi pour ton launcher
    demande dans le forum VB
    Il existe 3 sortes de gens: ceux qui savent compter et ceux qui ne savent pas.

  17. #17
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2012
    Messages : 15
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par ouiouioui
    ah sa ! Fallait utiliser Delphi pour ton launcher
    Plusieurs potes m'avait conseillé le VB.NET ou C# pour ce que je voulais faire. Et étant donné que le Basic je l'utilise depuis GW-BASIC sur Commodore et que j'ai de suite accroché à Visual Basic Express 2010 je me suis embarqué la dedans. Après le Delphi je connais pas du tout et si ça ressemble à la section code de Inno ça m'inspire pas plus que ça.
    Citation Envoyé par ouiouioui
    demande dans le forum VB
    Oui c'est ce que j'étais en train de me dire car en fait mon problème de compréhension des Mutex et de code sur Inno Setup est résolu.

    Donc merci à tous

  18. #18
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2012
    Messages : 15
    Points : 6
    Points
    6
    Par défaut
    Pour vraiment clôturer le sujet j'ajoute comment créer le fameux mutex en VB.NET :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ' dans Public Class
    Dim m As New Mutex(True, "MyMutex")

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [INNO SETUP] Détection répertoire automatique
    Par 21stcentury dans le forum Outils
    Réponses: 2
    Dernier message: 05/08/2014, 17h23
  2. Réponses: 2
    Dernier message: 05/01/2012, 16h25
  3. détection d'un processus en cours
    Par beusse dans le forum C++
    Réponses: 2
    Dernier message: 10/01/2011, 20h03
  4. Réponses: 2
    Dernier message: 02/02/2009, 15h26
  5. Inno Setup, Installer un programme au cours de l'install
    Par red210 dans le forum Installation, Déploiement et Sécurité
    Réponses: 0
    Dernier message: 04/03/2008, 23h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo