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

Windows Forms Discussion :

Inclure un EXE dans mon appli.


Sujet :

Windows Forms

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 15
    Points : 8
    Points
    8
    Par défaut Inclure un EXE dans mon appli.
    Bonjour.

    Ma life:

    Je suis débutant, mais néanmoins motivé.
    Après avoir épluché la toile, et acheté quelques livres, j'ai enfin pu finir mon premier projet.
    De l'acabit de "Hello World", très certainement pour vous, mais, en ayant besoin pour mon travail, je n'ai pas eu d'autre choix que de télécharger #developer et de me lancer.
    Bref, je ne vais pas vous saouler plus avec ma vie, même si parler de moi me passionne.

    Mon souci :

    A un moment de mon appli, je dois utiliser en ligne de commande un petit exe (appelons-le toto.exe).
    Pas de problème, c'est un jeu d'enfant (merci le forum ).
    Par contre, une fois compilé, je me retrouve avec mon toto.exe séparé de mon appli.exe.
    Pour des raisons évidentes d'utilisation de mon appli par des simples humains encore moins doués que moi (hé si, ça existe!!!), je me dois d'incorporer mon toto.exe dans mon appli.exe.

    Mon rêve:

    Quand le client double clique sur appli.exe, de manière transparente, cela installe dans un dossier temp, toto.exe, en même temps que ça lance appli.exe. Comme ça, appli.exe peut lancer toto.exe au moment opportun, et vider le temp à la fin...

    Mes recis :

    Merci à vous d'avoir lu, et d'avance, merci de m'accorder un peu de temps.

    PS) J'ai bien entendu cherché partout, mais, à moins de ne pas avoir les bons mots clefs, je n'ai rien trouvé de pertinent.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 277
    Points : 1 521
    Points
    1 521
    Par défaut
    Pour inclure un fichier dans une assembly .NET, il faut utiliser les ressources incorporées.

    Pour extraire une ressource incorporée, il faut utiliser System.Reflection, classe Assembly, méthode GetManifestResourceStream.

    Pour créer le fichier sur le disque, il va falloir utiliser les méthodes des classes Directory et Stream (System.IO).

    Pour l'exécution, il va falloir utiliser la classe Process de System.Diagnostics.

    Pour la suppression, les classes File et Directory (toujours de System.IO).

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 15
    Points : 8
    Points
    8
    Par défaut
    Wow!
    Rapidité et précision!
    J'adore!
    Je m'en vais de ce pas faire mes recherches dans ce sens, et comprendre le tout.
    Je m'octroie encore un petit délai (je connais aussi mon incompétence légendaire) avant de labéliser le post en "résolu".
    Merci à vous.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    327
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 327
    Points : 402
    Points
    402
    Par défaut
    Bonjour,
    Je ne sais pas si cela correspond bien a tes attentes, mais tu peux jeter un coup d'oeil sur les projets d'installtations OnClick de visual studio.
    A bientôt

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 15
    Points : 8
    Points
    8
    Par défaut
    Je galère tout de même, il est vrai.

    Pour l'instant, j'en suis à un stade, disons, mélassieux...

    J'ai ajouté "toto.exe" dans les éléments de ma solution. (via le clic droit dans sharpdevelop au niveau de ma solution)
    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
     
    using System.Reflection;
     
    if (!System.IO.Directory.Exists(@"C:\TOTO"))
    			{
    				System.IO.Directory.CreateDirectory(@"C:\TOTO");
    			}
    			// Extraire toto.exe dans c:\TOTO
     
    			Assembly _assembly;
    			Stream totoasm;
    			try
    			{
    				_assembly = System.Reflection.Assembly.GetExecutingAssembly();
    				totoasm = _assembly.GetManifestResourceStream("MyNameSpace.toto.exe");
    				System.IO.Stream.
     
    			}
    			catch
    			{
    				MessageBox.Show("Erreur d'accès aux resources!");
    			}
    Voilà où j'en suis... J'ai honte de faire appel ainsi à vous pour un truc qui doit être trivial.
    Je n'aime pas être assisté, et je préfère comprendre à appliquer bêtement, mais il y a un moment où...

    @wakan : Je vais aller zyeuter cela. Je ne sais pas non plus si cela va m'aider, surtout que j'utilise sharpdevelop. Le temps d'installer c# espress 2008...

    Merci à vous tous...

  6. #6
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 277
    Points : 1 521
    Points
    1 521
    Par défaut
    ClickOnce ne permet pas de répondre à ton besoin.

    Il faut spécifier que l'élément (toto.exe) est une ressource incorporée et non du contenu. Je ne sais pas comment le faire dans SharpDevelop. Dans Visual Studio, ça se situe au niveau des propriétés de fichier, Action de génération. Ca doit être approchant dans SharpDevelop en tout cas...

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 15
    Points : 8
    Points
    8
    Par défaut
    Chic, j'avance!
    Merci à vous pour vos aides.
    Donc, effectivement, ayant testé par analogie, j'ajoute toto.exe via un clic droit sur le nom de ma solution, dans mon tableau projet.
    Dans propriétés, je choisis alors pour le combo "Generation", l'option EmbeddedRessource.
    Je ne sais pas si le code que j'ai affiché plus haut est bon.
    En gros, il me resterait à trouver comment enregistrer le fichier dans @"C:\TOTO" au lancement de l'appli.exe...

  8. #8
    Rédacteur
    Avatar de The_badger_man
    Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2005
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 745
    Points : 8 538
    Points
    8 538
    Par défaut
    Non mais inclure un .exe dans un autre c'est pas franchement la meilleur solution.

    Tu fais un projet de déploiement (msi) qui installe ton programme et toto.exe au bon endroit.

    Tu as quelle version de Visual Studio ? La version Express ne gère pas les projets de déploiement msi. Mais tu peux utiliser des installeurs gratuits(comme NSIS).
    Les règles du forum
    Le trio magique : FAQ + Cours + fonction rechercher
    Mes articles
    Pas de questions par messages privés svp

    Software is never finished, only abandoned.

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 15
    Points : 8
    Points
    8
    Par défaut
    Je travaille sous sharpDevelop...
    Effectivement, utiliser l'équipe du NCIS peut être la solution ( j'entends même le bleu me conseiller "Zy-va!")
    Mais c'est vrai que je me suis un peu braqué, car je voulais comprendre comment intégrer mon exe dans l'appli (ça, c'est fait), et comment l'extraire extemporanément (ça... bin, c'est pas encore le cas).
    Après, passer par un installateur, un zip auto extractible, ou autre solution peut contourner plus ou moins élégamment le problème, et me simplifier la vie.
    Mais du coup, je n'éclaire pas ma comprenette, et c'est aussi le but de mon apprentissage.
    Comprendre.
    Donc, en attendant, je vais surement continuer à explorer la toile, et mendier votre aide, sachant bien évidemment que NSIS sera la solution palliative en cas d'impasse...

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 15
    Points : 8
    Points
    8
    Par défaut
    Je double poste, je sais, ce n'est pas bien...
    Mais c'est pour indiquer que j'ai trouvé le moyen.
    Je me suis compliqué la vie pour rien, il y avait plus simple...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    string FileName = "NomEspace.toto.exe"; // On indique le nom d'espace et le fichier incorporé.
    string FilePath = @"C:\TOTO\toto.exe"; // Le chemin final
    Assembly Assem = Assembly.GetExecutingAssembly();
    Stream str = Assem.GetManifestResourceStream(FileName);
    BinaryReader br = new BinaryReader(str);
    FileStream fs = new FileStream(FilePath, FileMode.Create);
    BinaryWriter bw = new BinaryWriter(fs);
    byte[] ba = new byte[str.Length];
    str.Read(ba, 0, ba.Length);
    bw.Write(ba);
    br.Close();
    bw.Close();
    Et voilà...
    Merci encore à tous ceux qui m'ont aidé et mis sur la voie.

    A bientôt,

    T@PµZ.

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

Discussions similaires

  1. Inclure un EXE dans mon programme et l'appeler ?
    Par Pouknouki dans le forum Développement Windows
    Réponses: 3
    Dernier message: 18/06/2014, 19h04
  2. inclure la config dans mon exe
    Par Papy214 dans le forum C#
    Réponses: 5
    Dernier message: 20/11/2008, 10h02
  3. Réponses: 3
    Dernier message: 03/04/2006, 18h30
  4. Réponses: 7
    Dernier message: 25/01/2006, 21h37
  5. [JAR]Probleme pour inclure un jar dans une appli Web
    Par ouedmouss dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 09/12/2005, 09h40

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