t0fx
Messages postés22Date d'inscriptionmercredi 24 octobre 2007StatutMembreDernière intervention 1 décembre 2009
-
15 avril 2009 à 20:30
t0fx
Messages postés22Date d'inscriptionmercredi 24 octobre 2007StatutMembreDerniè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 ^^
cs_Robert33
Messages postés834Date d'inscriptionsamedi 15 novembre 2008StatutMembreDernière intervention14 janvier 201733 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");
}
cs_Robert33
Messages postés834Date d'inscriptionsamedi 15 novembre 2008StatutMembreDernière intervention14 janvier 201733 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.