Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1120 connectés 

  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  Stockage d'un fichier dans l'exe et écriture sur HDD à la prem. exec.

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Stockage d'un fichier dans l'exe et écriture sur HDD à la prem. exec.

n°2220088
yves848
Posté le 18-02-2014 à 18:29:46  profilanswer
 

Bonjour,
 
Je développe une application en C# qui réalise une migration de données entre différents soft médicaux et celui de ma boîte qui utilise SQLServer 2008R2 (juste pour info).
Pour chaque DB dont je dois récupérer les données, j'écris un "plug-in" (dll) qui effectue une injection / transformation des données brutes dans une DB intermédiaire.
Ensuite, la partie "commune" de l'application transfère le contenu de la DB intermédiaire vers la DB d'exploitation en effectuant toutes les vérifications et modifications nécessaires.
Actuellement, j'ai plusieurs plugs-in qui permettent de récupérer des DB aussi diverses que : Paradox, HyperFile, FireBird, SqlAnywhere, Oracle, .....
 
Jusqu'à présent, les techniciens qui effectuaient la migration n'avaient qu'à déployer l'application.  Mais avec la dernière DB pour laquelle j'ai du écrire un nouveau "plug-in", j'ai du également écrire une librairie UDF pour FireBird 2.5 (en Delphi).  
 
J'en viens à ma question .....
 
Comment stocker cette dll UDF dans l'exe et l'écrire dans le répertoire UDF de FireBird lors de la première exécution de mon exe ?
Ou de manière plus générale, comment stocker un fichier dans l'exe et être capable de l'écrire sur le disque lors de l'exécution.
 
J'espère avoir été plus ou moins clair ..... :-)
 
Merci d'avance pour votre aide.
 
Yves

mood
Publicité
Posté le 18-02-2014 à 18:29:46  profilanswer
 

n°2220121
olivthill
Posté le 18-02-2014 à 22:57:25  profilanswer
 

Ce n'est pas facile, car l'exécutable contient souvent un checksum qui est testé au début du programme. Donc, si on rajoute quelque chose il faut aussi changer le checksum. Et si on raccourcit l'exécutable, il faut aussi changer le checksum. L'implantation de ce checksum varie selon les types d'exécutables et selon les compilateurs utilisés.
 
Bref, c'est beaucoup plus compliqué qu'on ne pourrait le penser à priori, et il vaut mieux se rabattre vers les solutions classiques de fichiers compressés et auto-extractibles. Par exemple, 7-zip, Winrar, etc. permettent de faire ça.

n°2220123
Devil'sTig​er
Posté le 18-02-2014 à 23:15:35  profilanswer
 

Stocke le dans les ressources de ton application (vu que t'es en C# c'est pas bien compliqué) et fait une lecture de ces datas vers le disque.
 
Un exemple pour une image:
 
Stream imgStream =  
    Assembly.GetExecutingAssembly().GetManifestResourceStream(
    "YourNamespace.resources.ImageName.bmp" );
pictureBox.Image = new Bitmap(imgStream);
 
 
Pour le checksum; c'est des emmerdes que t'aura pas en c# avec une technique comme ca.

n°2220126
yves848
Posté le 18-02-2014 à 23:26:03  profilanswer
 

Merci à tous les deux.
 
Je pense que je vais essayer avec la solution des ressources.
C'est un peu à ça aussi que je pensais après avoir cherché différentes possibilités.
 
Merci.  Je viendrai faire un petit compte-rendu de la solution retenue.

n°2220128
olivthill
Posté le 18-02-2014 à 23:30:23  profilanswer
 

C'est vrai, j'avais oublié cette solution de mettre cela dans une ressource qui accepte le binaire.
 
Il y a aussi Windows Installer et d'autres logiciels d'installation qui sont prévus pour ce genre de déploiement.

n°2220175
yves848
Posté le 19-02-2014 à 14:10:47  profilanswer
 

Code :
  1. Stream dllStream = Assembly.GetExecutingAssembly().GetManifestResourceStream("MyNameSpace.FireBird_SK.dll" );
  2.     BinaryReader brReader = new BinaryReader(dllStream);
  3.     FileStream fsStream = new FileStream(@"C:\Firebird\Firebird_2_5\UDF\FireBird_SK.dll", FileMode.Create);
  4.                    
  5.     BinaryWriter bwWriter = new BinaryWriter(fsStream);
  6.     byte[] baBytes = new byte[dllStream.Length];
  7.     dllStream.Read(baBytes, 0, baBytes.Length);
  8.     bwWriter.Write(baBytes);
  9.     brReader.Close();
  10.     bwWriter.Close();
  11.     dllStream.Close();


 
Voilà, c'est fait.  J'ai mis un exemple du code utilisé.  Ça marche nickel.
 
Merci pour l'aide !
 
@+

n°2220221
Devil'sTig​er
Posté le 19-02-2014 à 19:48:52  profilanswer
 

:jap:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  Stockage d'un fichier dans l'exe et écriture sur HDD à la prem. exec.

 

Sujets relatifs
Agrandir les cases d'écriture[HELP] modificateur de plusieur fichier texte
Comment génerer un fichier csv à partir d'une base de données?injection dans fichier .JS
Probéme de codage pour lire la taille de fichier texteBesoin d'aide pour fichier gestion absence en VBA
Injecter un fichier CSV avec un script phpDécompresser un fichier son
[résolu] découper un fichier selon contenu de la lignephp performance flush or lecture d'un fichier de cache
Plus de sujets relatifs à : Stockage d'un fichier dans l'exe et écriture sur HDD à la prem. exec.


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR