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.NET Discussion :

Exécuter l'exe de mon projet sur une autre machine


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 24
    Par défaut Exécuter l'exe de mon projet sur une autre machine
    Bonjour à tous,

    Je suis entrain de travailler sur un projet depuis maintenant 2 mois (création d'un système d'acquisition de donnéeS). J'utilise Visual Studio 2013. Je viens de finir la partie code de mon programme, cependant je voulais savoir si au cas ou je crée mon executable est ce que mon programme pourra tourner sur une autre machine qui n'a pas forcement visual studio? mon objectif serait qu'il puisse tourner après sur n'importe qu'elle machine. j'aurai une deuxième question qui concerne l'execution de mon fichier executable: j'ai réussi a créer le fichier executable grâce à Installshield cependant lorsque je le lance sur une autre machine il me met l'erreur suivante : "La référence d'objet n'est pas définie à une instance d'un objet". C'est l'exception "System.NullReferenceException" qui n'a pas été géré. Cependant j'ai mis des "New" à toutes les variables que j'ai déclarées, et j'ai fait des "try Catch" sur presque toutes les méthodes mais cependant le même problème apparaît. Avez vous des idées sur comment le surmonter?

    Merci d'avance

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 193
    Par défaut
    le but de visual studio est bien de faire des programmes qui fonctionnent sur d'autres machines, vs n'est que le logiciel permettant de faire le programme, il n'est pas nécessaire sur les autres machines
    par contre dans le projet on choisit une version du framework (2, 3.5, 4, 4.5 ...) et ce framework est nécessaire sur les autres machines
    dans la plupart des cas windows update l'aura mis, sinon le mieux reste de faire un setup.exe qui inclut le framework (du moins si on veut une install autonome, il reste possible de l'installer à la main et de copier l'exe)

    concernant ton nullreferenceexception ceci provient surement d'un bug dans ton code, un bug ne se produire que sur certains postes, qu'à certaines dates etc... ce n'est pas forcément quelque chose qui ne marche jamais
    chercher ce qui est absolu comme un chemin, une chaine de connexion ... ca peut etre aussi un manque de droits ...
    les try catch interceptent les erreurs, et donc par défaut les masquent, mais il faut faire quelque chose dans le catch en vue de corriger ces erreurs
    imaginons un endroit ou tu veut lire un fichier pour remplir une variable, le fichier n'existe pas sur le poste et du coup la variable n'est pas remplie, tu peux alors avoir un nullreference lors de l'accès ailleurs à cette variable

    dans le catch il faut en général enregistrer les éléments de l'erreur permettant de la comprendre et de la corriger (ex.gettype.fullname, ex.message, ex.Stacktrace ...)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Citation Envoyé par ousmane126 Voir le message
    Bonjour à tous,

    cependant je voulais savoir si au cas ou je crée mon executable est ce que mon programme pourra tourner sur une autre machine qui n'a pas forcement visual studio? mon objectif serait qu'il puisse tourner après sur n'importe qu'elle machine.
    Visual Studio est un environnement de développement donc lorsque tu généreras ton binaire en mode "release" (prêt à distribuer) tu le récupères à cet emplacement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ....Mes Documents\Visual Studio 2013\Projects\%LE-NOM-DE-TON-PROJET%\%LE-NOM-DE-TON-PROJET%\bin\Release
    Citation Envoyé par ousmane126 Voir le message
    j'ai réussi a créer le fichier executable grâce à Installshield ....
    On ne créé pas l'exécutable avec InstallShield, ce dernier étant un assistant d'installation d'application : lire ceci InstallShield

    Peut-être que tu exposes très mal ton problème mais on dirait que tu fais l'amalgame entre le binaire généré avec VS et celui généré avec InstallShield ......

    Citation Envoyé par ousmane126 Voir le message
    Cependant j'ai mis des "New" à toutes les variables que j'ai déclarées, et j'ai fait des "try Catch" sur presque toutes les méthodes mais cependant le même problème apparaît. Avez vous des idées sur comment le surmonter?

    Merci d'avance
    Tu dis avoir placés des Try Catch à toutes tes méthodes mis gères-tu les exceptions au moins, le cas échéant c'est une très mauvaise pratique de codage !!

    ..brefff..... si ton programme fonctionne sans empaqueter avec Installshield sur un autre PC alors il faudra certainement revoir le paramétrage de cette dernière étape.


    A+

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 24
    Par défaut
    Merci beaucoup pour vos réponses rapides. Pol63 j'ai fait comme ce que t'as dit à propos du framework mais sans vraiment comprendre pourquoi mais maintenant je comprend mieux avec tes explications . Aussi pour ce qui est de la gestion des exceptions à chaque catch j'ai demandé d'afficher le message de l'exception c'est à dire un ex.Message. Ce qui est bizarre est que lorsque je lance l'application sur le PC avec lequel j'ai fait mon programme il n'y a aucune exception ni erreur qui est détectée, le programme marche bien que se soit en mode debug ou release; Cependant lorsque je le lance sur un autre PC (après avoir fait le setup.exe en joignant le framework associé grâce à InstallShield) l'exception apparaît et le pire est que le détail n'est pas donné du coup c'est la galère pour retrouver l'erreur. J'en vient donc à Wallace1; Pour ce qui est de la manière de faire l'executable au début je mettais le compilateur en mode release et je creais mon exe cependant ce dernier ne marche pas sur un autre PC( L'application ne démarre même pas) c'est pour cela que j'ai essayé une autre manière en utilisant InstallShield. Avec ce dernier au moins, l'application démarre mais plante sur l'exception NullReference dont j'avais parlé tout à l'heure.

  5. #5
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 193
    Par défaut
    le mode debug est prévu pour les tests (il reste possible de tester en mode release)
    le mode release est prévu pour le déploiement
    la différence est dans le code compilé qui est différent dans les 2 modes, le programme fait la même chose mais en mode debug visual studio ajoute un peu de code permettant de debugger

    à la place d'afficher ex.message il faudrait ex.message et ex.stacktrace
    stacktrace est la pile des appels
    si la méthode A appelle la méthode B qui elle plante, ex.stacktrace contiendra
    à B
    à A
    permettant de voir le cheminement des appels de méthodes, la dernière étant en haut
    après le mieux est d'appeler une méthode générique dans le catch, si tu avais fait ca au début au lieu de mettre msgbox (ex.message) partout tu n'aurais qu'un endroit à changer pour afficher en plus ex.stacktrace, là je suppose que tu vas le changer partout
    et donc une fois que verras la pile des appels tu sauras d'où provient l'erreur, et si tu ne comprends pas pourquoi elle se produit tu pourras au moins nous donner la partie de code qui plante

    sinon le mieux est aussi de ne pas afficher l'erreur, un utilisateur final ne va rien y comprendre et ca ne va pas lui faire bonne impression, tu peux enregistrer ca dans une base de données ou dans un fichier, on envoyer un mail etc...

    dernière astuce pour les débutants ou les problèmes compliqués, visual studio génère des fichiers .pdb pour chaque exe et dll, en copiant ces fichiers sur le poste te posant problème à côté de l'exe tu auras aussi les numéros de lignes dans ex.Stacktrace
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 24
    Par défaut
    Merci bien Pol63 pour tes explications très claires, je vais essayer d'appliquer ce que tu me conseilles avec les ex.stackTrace et je reviendrai vers vous si je ne comprend pas comment surmonter le problème,merci. Pour ce qui est de la méthode générique dont tu parles, je n'ai pas très bien saisi ce que tu voulais dire par la. Aussi le fichier .Pdb qui est généré, ou est ce que je le trouve? j'ai regardé dans le dossier de mon application mais il n'y ai pas. Si je comprend bien il suffit que je le colle dans le même dossier que mon exe et lorsque je lancerai mon application, si une erreur est détectée j'aurai la ligne qui contient l'erreur.

  7. #7
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 193
    Par défaut
    générique n'est pas le bon terme oui ^^

    ce que je voulais dire c'est au lieu de

    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
    sub s1
     try catch
     
     catch ex as exception
       msgbox (ex.message & vbcrlf & ex.stacktrace)
     end try
    end sub
     
    sub s2
     try catch
     
     catch ex as exception
       msgbox (ex.message & vbcrlf & ex.stacktrace)
     end try
    end sub
    c'est de faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public class GestionErreur
     
      public shared sub Erreur(ex as exception)
        msgbox (ex.message & vbcrlf & ex.stacktrace)
      end sub
     
    end class
    et donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    sub s2
     try catch
     
     catch ex as exception
       GestionErreur.Erreur(ex)
     end try
    end sub
    comme ca le jour ou tu veux passer d'un affichage de l'erreur à un enregistrement tu ne perds pas du temps à faire le tour du code
    d'une manière générale dès que tu as 2x le même code (ou presque) il ne faut l'écrire 2x mais le déporter (avec des paramètres s'il y a des légères différences de traitements)

    les .pdb sont dans les dossiers debug et release, peut etre en fichier caché, ou sinon voir les propriétés du projet pour cocher "générer pdb"
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

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

Discussions similaires

  1. [Débutant] Mettre mon projet sur une clef USB ou CD
    Par MarkouZz68 dans le forum ASP.NET
    Réponses: 2
    Dernier message: 04/07/2013, 12h22
  2. exécution d'un programme compilé sur une autre machine
    Par haorua1983 dans le forum Administration système
    Réponses: 4
    Dernier message: 09/02/2007, 17h25
  3. Jar excutable problématique sur une autre machine
    Par lars528 dans le forum Général Java
    Réponses: 8
    Dernier message: 23/08/2006, 10h49
  4. Réponses: 2
    Dernier message: 12/05/2006, 15h58
  5. comment faire fonctionner l'exe sur une autre machine
    Par brian79 dans le forum C++Builder
    Réponses: 8
    Dernier message: 28/05/2004, 14h00

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