none
Utilisation d'un fichier dans les ressources sans drop RRS feed

  • Question

  • Bonjour à tous, n'ayant pas trouver sur google de réponse à mes question je viens poser ma question ici :

    J'aimerai pouvoir utiliser un fichier qui serait compiler dans les ressources de mon projet, j'ai déjà vu des solutions qui le permettent mais en "ECRIVANT" le fichier en question sur le disque préalablement, cette solution ne me satisfait pas, car la ressource en question, ce que je veut faire c'est la proteger, en tout cas, que des personnes n'aillent pas la prendre dans le %temp% ou dans le dossier sur lequel il est écrit.

    C'est pour cela que je recherche un moyen de pouvoir utiliser un programme, ou un fichier dans mes ressources (par exemple, un .exe qui se trouve dans mes ressources qui ira décompresser un .zip qui se trouve lui aussi en ressources sans "drop" , ou si le drop est obligatoire, un moyen pour que l'utilisateur ne puisse accéder à ces fichiers.

    Coordialement, Tfkmaster =)

    lundi 30 avril 2012 11:34

Réponses

  • Bonjour,

    Créez un fichier ressource dans votre projet.
    Sélectionnez en haut à gauche de l'éditeur de ressources "Fichiers".

    Faites un glissez-déplacer d'un fichier (par exemple un fichier .zip).

    Au niveau de votre code, vous pouvez récupérer le contenu de ce fichier (en mémoire, et donc sans l'enregistrer qq part dans un fichier temporaire !) :

    Dim fic As Byte()
    fic = My.Resources.FichierRessources.NomRessource

    Ainsi, le contenu de votre fichier se trouve dans le tableau d'octets "fic".

    Est-ce que cela répond à votre besoin ?

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0

    • Marqué comme réponse Tfkmaster lundi 30 avril 2012 20:59
    lundi 30 avril 2012 13:57
    Modérateur

Toutes les réponses

  • Bonjour,

    Créez un fichier ressource dans votre projet.
    Sélectionnez en haut à gauche de l'éditeur de ressources "Fichiers".

    Faites un glissez-déplacer d'un fichier (par exemple un fichier .zip).

    Au niveau de votre code, vous pouvez récupérer le contenu de ce fichier (en mémoire, et donc sans l'enregistrer qq part dans un fichier temporaire !) :

    Dim fic As Byte()
    fic = My.Resources.FichierRessources.NomRessource

    Ainsi, le contenu de votre fichier se trouve dans le tableau d'octets "fic".

    Est-ce que cela répond à votre besoin ?

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0

    • Marqué comme réponse Tfkmaster lundi 30 avril 2012 20:59
    lundi 30 avril 2012 13:57
    Modérateur
  • Bonjour,

    Cette solution me parait avantageuse est utile, cependant il reste pour moi quelques points à éclaircir :

    - Avec cette même méthode, comment puis-je demarrer un executable chargé en mémoire (surement avec une commande d'execution, mais quel path prendre dans ce cas)

    - Comment prendre pour "cible" mon archive mit en mémoire (bref quel path serait reconnu par une application afin de pouvoir decompresser le zip préalablement mit en mémoire)

    - La mise en tableau de bytes doit surement prendre un certain temps (le même que celui d'un drop je suppose), et j'aimerai pouvoir suivre l'avancement de la mise en mémoire (grâce à un backgroundworker) mais quel commande permettrai de suivre cette manœuvre

    Je vous remercie par avance si vous pouriez m'éclaircir sur ces quelques points, et si vous aviez des docs à ce sujet, je suis preneurs (français ou anglais)


    • Modifié Tfkmaster lundi 30 avril 2012 15:13
    lundi 30 avril 2012 15:11
  • Bonjour,

    - Avec cette même méthode, comment puis-je demarrer un executable chargé en mémoire (surement avec une commande d'execution, mais quel path prendre dans ce cas)
    Si c'est un executable .NET, il est possible via Reflection d'exécuter l'assembly (DLL ou EXE) qui se trouve en mémoire en créant un nouveau AppDomain.

    La mise en tableau de bytes doit surement prendre un certain temps (le même que celui d'un drop je suppose), et j'aimerai pouvoir suivre l'avancement de la mise en mémoire (grâce à un backgroundworker) mais quel commande permettrai de suivre cette manœuvre
    Si votre executable fait + de 100 Mo avec un PC qui a plus de 5 ans, il est vrai que cela peut prendre un certain temps (environ 5 secondes)... Dans le cas contraire, le fait d'afficher une barre de progression ralentira un peu plus le chargement de votre application.

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0

    lundi 30 avril 2012 15:47
    Modérateur
  • Merci pour votre réponse rapide

    L'executable en question n'est pas en .NET, c'est bien pour cela que je penssait à un path ^^

    Ce serait comme charger 7zip portable en mémoire pour le lancer dans mon cas ^^

    Mais je pense qu'avec les éléments qui vous m'avez fournis je devrais m'en sortir, merci beaucoup :)

    Cependant si vous aviez un exemple d'execution précis, ca m'aiderai beaucoup :P
    • Modifié Tfkmaster lundi 30 avril 2012 21:34
    lundi 30 avril 2012 21:01