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

VB 6 et antérieur Discussion :

[VB6] comment renvoyer un exit code en VB6 ? [Trucs & Astuces]


Sujet :

VB 6 et antérieur

  1. #1
    VVE
    VVE est déconnecté
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 72
    Points : 47
    Points
    47
    Par défaut [VB6] comment renvoyer un exit code en VB6 ?
    Hugh à tous et à toutes,

    Je cherche comment faire pour que mon application VB6 renvoie un code retour (0 si succès ou 1 si échec) à l'application qui l'a appelée.

    Je suis en train de mettre au point un jeu d'installation avec InstallShield Express.

    J'utilise une "Custom Action" qui me permet d'exécuter un EXE après l'une ou l'autre des étapes de l'installation (ie après la copie des fichiers sur le poste cible).

    Cet EXE est une appli VB6 qui me permet de demander à l'utilisateur tout un tas de renseignements pour initialiser des tables dans une BDD spécifique.

    Or, en cas d'échec de ce programme, InstallShield offre la fonctionnalité d'arrêter son script d'installation (et de revenir en arrière en supprimant tout ce qui a déjà été copié).

    Or pour cela, il teste le code retour renvoyé par l'application EXE (1 échec, 0 succès, ou l'inverse !)... D'où ma question

    Merci de votre aide

    Vincent

  2. #2
    HPJ
    HPJ est déconnecté
    Membre averti

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2003
    Messages : 260
    Points : 364
    Points
    364
    Par défaut
    Une petite recherche Google et voilà:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Declare Sub ExitProcess Lib "kernel32" (ByVal uExitCode As Long)
    Private Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long
    Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
    Private Sub Form_Load()
        'KPD-Team 1999
        'URL: http://www.allapi.net/
        'E-Mail: KPDTeam@Allapi.net
        'end this process
        ExitProcess GetExitCodeProcess(GetCurrentProcess, 0)
    End Sub
    Ce code suffit pour ce que tu veux faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Declare Sub ExitProcess Lib "kernel32" (ByVal uExitCode As Long)
    ...
    ExitProcess monCodeDeRetour
    Avant de poser une question, merci de chercher dans les rubriques suivantes:
    FAQ VB
    Tutoriaux VB
    Recherche avancée sur le forum

  3. #3
    VVE
    VVE est déconnecté
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 72
    Points : 47
    Points
    47
    Par défaut
    merci je vais essayer tout de suite !

  4. #4
    VVE
    VVE est déconnecté
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 72
    Points : 47
    Points
    47
    Par défaut
    Merci pour le code de l'API ExitProcess(), ça renvoie bien ce que je veux.

    Par contre InstallShield ne semble pas pouvoir le récupérer ! Je pense que c'est un bug d'InstallShield.

    Je lancerai mon Assistant à la main et non de façon automatique dans mon jeu d'installation...

    Pour info, voici le code que j'ai ajouté qui renvoie le code SUCCES ou ECHEC en fonction d'une variable globale booléenne.

    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
    Private Sub Form_Unload(Cancel As Integer)
        If Not gblnTraitementTerminé Then
            ' annulation de l'opération si utilisateur répond NON
            Cancel = MsgBox("Le traitement n'est pas terminé." & vbCrLf & vbCrLf & _
                "Voulez-vous tout de même quitter cet assistant ?", _
                vbYesNo + vbDefaultButton2 + vbExclamation) = vbNo
        End If
     
        ' renvoie un code retour en fonction du type de sortie
        If Not Cancel Then
            If gblnTraitementTerminé Then
                ExitProcess 1 ' SUCCES => InstallShield continue
            Else
                ExitProcess 0 ' ECHEC => InstallShield s'arrête (en principe !!)
            End If
        End If
    End Sub
    Pour valider que c'était OK j'ai créé un lanceur de commande synchrone en utilisant les API CreateProcess(), WaitForSingleObject() et GetExitCodeProcess()

    en appelant mon Assistant à partir de ce lanceur, je récupère bien le code SUCCES ou ECHEC renvoyé en fin de traitement.

  5. #5
    HPJ
    HPJ est déconnecté
    Membre averti

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2003
    Messages : 260
    Points : 364
    Points
    364
    Par défaut
    Et avec ExitProcess -1, Install Shield continue quand même :
    Avant de poser une question, merci de chercher dans les rubriques suivantes:
    FAQ VB
    Tutoriaux VB
    Recherche avancée sur le forum

  6. #6
    VVE
    VVE est déconnecté
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 72
    Points : 47
    Points
    47
    Par défaut
    D'après l'exemple fourni dans InstallShield, et notamment une DLL en C qui permet de lancer une "Custom Action", le comportement d'InstallShield est le suivant :

    Exit Code = 0 => L'installation est interrompue
    Exit Code <> 0 => L'installation continue

    J'ai testé la DLL et c'est bien ce comportement qui est obtenu.

    Lorsque je reproduit ces Exit Code dans l'EXE en VB, InstallShield n'interprète pas correctement.

    Je suis passé à autre chose, mais si je trouve un peu de temps, j'essaierai ton idée...

    8)

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

Discussions similaires

  1. [oracle + vb6] Comment récupérer une sortie dbms_output dans vb6
    Par pschiit dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 09/02/2011, 17h45
  2. [VB6] Comment Lancer un fichier externe sous vb6 ??
    Par Barred dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 30/05/2006, 20h35
  3. [VB6] Comment Debugger une activeX ??
    Par Berns dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 19/05/2003, 18h34
  4. [VB6] Comment boucler sur des controls d'un form ?
    Par lankviller dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 27/01/2003, 17h29
  5. [VB6] Comment accéder a la visionneuse d'API ??
    Par Argonz dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 13/11/2002, 13h57

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