Extraire 3 fichiers d'un exe

Résolu
t0fx Messages postés 22 Date d'inscription mercredi 24 octobre 2007 Statut Membre Dernière intervention 1 décembre 2009 - 15 avril 2009 à 20:30
t0fx Messages postés 22 Date d'inscription mercredi 24 octobre 2007 Statut Membre Dernière intervention 1 décembre 2009 - 16 avril 2009 à 23:00
Bonjour à tous, je vous expose mon problème, j'essaye de créer un setup.exe sans passer par les logiciels de création automatique de setup... Voilà le code que j'ai utilisé pour mettre mon executable avec 2 dll en un seul exe :

        {
            var filesplit = "$$$$";
            var FileExe = new FileStream(Application.StartupPath + "\\DLL\\start.exe", FileMode.Open);
            var Filedll1 = new FileStream(Application.StartupPath + "\\DLL\\22d.dll", FileMode.Open);
            var Filedll2= new FileStream(Application.StartupPath + "\\DLL\\22e.dll", FileMode.Open);
            var br1 = new BinaryReader(FileExe);
            var br2 = new BinaryReader(Filedll1);
            var br3 = new BinaryReader(Filedll2);
            byte[] bin1 = br1.ReadBytes(Convert.ToInt32(FileStub.Length));
            byte[] bin2 = br2.ReadBytes(Convert.ToInt32(File1.Length));
            byte[] bin3 = br3.ReadBytes(Convert.ToInt32(File2.Length));
            Stream bindedfile = new FileStream(Application.StartupPath + "\\SETUP.exe", FileMode.Create);
            var bw = new BinaryWriter(bindedfile);
            bw.Write(bin1 + filesplit);
            bw.Write(bin2 + filesplit);
            bw.Write(bin3);
            bw.Close();
            File1.Close();
            File2.Close();
            FileStub.Close();
            br1.Close();
            br2.Close();
            br3.Close();
        }

Ca me donne un SETUP.exe avec mon executable et les 2 dll dans un seul fichier. Je voulai savoir maintenant comment faire pour le découper et récupérer les 3 fichiers... Je pensai que ce serai facile en utilisant une variable filesplit qui servirai de point de découpage mais la je me casse la tête pour réussir à découper tout ça!
Donc si quelqu un pouvait m aider ça serai sympa ^^

5 réponses

cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 janvier 2017 33
16 avril 2009 à 14:55
quelque chose comme ça:

Stream setup=new FileStream("setup.exe",FileMode.Open );
BinaryReader br = new BinaryReader(setup);
int len1 = br.ReadInt32();
byte[] dataFile1 = br.ReadBytes(len1);

Cela dit, tu peux aussi faire ton propre Setup en utilisant le visual studio:

Tu te crées ton propre programe d'installation, une application windows ordianire.

Dans ton projet tu ajoutes les fichiers que tu veux embarquer, dans leur propriétés tu changes
"Build Action" de "none" à "Embedded Ressource"

Le fait de possitioner "Embedded Ressource" va obliger le compilateur à integrer ce fichier comme une ressource, il fera donc parti integrante de l'executable final.
(Désolé pour l'anglais mais je n'ai pas de version française du VS.)

Dans ton programme il ne te reste plus qu'à extraire ces fichiers:

dans l'exemple ci dessous, j'ai un projet "MonProjet" auquel j'ai ajouté un fichier "Test.dll"

try

   System.Reflection.Assembly thisExe; 
   thisExe = System.Reflection.Assembly.GetExecutingAssembly(); 
   using (System.IO.Stream input = thisExe.GetManifestResourceStream("MonProjet.Test.dll")) 
   { 
      using (System.IO.FileStream output= System.IO.File.Create("Test.dll")) 
      { 
         byte[] buffer = new byte[32768]; 
         int read; 
         while ((read = input.Read(buffer,0,buffer.Length)) >0) 
         { 
            output.Write(buffer, 0, read); 
         } 
      } 
   }
}
catch
{
   System.IO.File.Delete("Test.dll");
}

C# is amazing, enjoy it!
3
t0fx Messages postés 22 Date d'inscription mercredi 24 octobre 2007 Statut Membre Dernière intervention 1 décembre 2009
15 avril 2009 à 20:34
erreur dans le code, voici le bon :

        {
            var filesplit = "$$$$";
            var FileExe = new FileStream(Application.StartupPath + "\\DLL\\start.exe", FileMode.Open);
            var Filedll1 = new FileStream(Application.StartupPath + "\\DLL\\22d.dll", FileMode.Open);
            var Filedll2= new FileStream(Application.StartupPath + "\\DLL\\22e.dll", FileMode.Open);
            var br1 = new BinaryReader(FileExe);
            var br2 = new BinaryReader(Filedll1);
            var br3 = new BinaryReader(Filedll2);
            byte[] bin1 = br1.ReadBytes(Convert.ToInt32(FileExe.Length));
            byte[] bin2 = br2.ReadBytes(Convert.ToInt32(Filedll1.Length));
            byte[] bin3 = br3.ReadBytes(Convert.ToInt32(Filedll2.Length));
            Stream bindedfile = new FileStream(Application.StartupPath + "\\SETUP.exe", FileMode.Create);
            var bw = new BinaryWriter(bindedfile);
            bw.Write(bin1 + filesplit);
            bw.Write(bin2 + filesplit);
            bw.Write(bin3);
            bw.Close();
            File1.Close();
            File2.Close();
            FileStub.Close();
            br1.Close();
            br2.Close();
            br3.Close();
        }
0
cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 janvier 2017 33
16 avril 2009 à 08:29
Bonjour,

plutôt que d'utiliser un séparateur, pourquoi n'inscris-tu pas la mongueur des fichiers en tête ?
cela te permetrais par la suite de lire les fichiers un par un.

genre:
bw.Write(

Convert.ToInt32(FileExe.Length));
bw.Write(bin1);
bw.Write(
Convert.ToInt32(Filedll1.Length));
bw.Write(bin2);
bw.Write(
Convert.ToInt32(Filedll2.Length));
bw.Write(bin3);

C# is amazing, enjoy it!
0
t0fx Messages postés 22 Date d'inscription mercredi 24 octobre 2007 Statut Membre Dernière intervention 1 décembre 2009
16 avril 2009 à 08:32
Ah oui je n'y avai pas pensé, mais après pour découper je peux faire comment ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
t0fx Messages postés 22 Date d'inscription mercredi 24 octobre 2007 Statut Membre Dernière intervention 1 décembre 2009
16 avril 2009 à 23:00
Ah excellent je connaissai pas ça ! merci encore pour le coup de main !
0
Rejoignez-nous