none
Comment distribuer une dll (empaquetage) ? RRS feed

  • Question

  • Comment distribuer un dll (empauetage) ?

    Bonjour,

    Comment distribuer un dll, en l'espèce wLanApi.dll, qui se trouve sur mon pc en C:\window\system32\wLanApi.dll

        Où là déclarer pour qu'elle soit distribuée puis automatiquement installée ?

        Merci, cordialement ;o)

    Joe.
    jeudi 31 décembre 2009 07:41

Réponses

  • Cher Mathieu, chat marche comme dirait mon chat, qui est en fait une chatte :

    File.WriteAllBytes(

    My.Application.Info.DirectoryPath + "\wlanapi.dll", My.Resources.wlanapi())

    Je remercie ton génial génie, y a juste avec Debug (dans "Bin") que ça ne veut pas écrire, mais ce n'est pas important, car j'ai déplacé l'exe pour voir, et il écrit bien la dll (extrait) = résolu !

    Très cordialement :o)

    Joe.


    Cordialement. Joe http://irolog.free.fr . .
    • Marqué comme réponse EhJoe vendredi 1 janvier 2010 22:24
    • Modifié EhJoe vendredi 1 janvier 2010 22:26 1
    vendredi 1 janvier 2010 22:23

Toutes les réponses

  • Bonjour,

    Vous souhaitez uniquement déployer cette dll ?

    Dans le cas où vous voudriez la déployer avec votre projet, je vous invite à lire "Projets d'installation et de déploiement" dans le MSDN à l'adresse suivante :
    <!---->
    http://msdn.microsoft.com/fr-fr/library/wx3b589t(VS.80).aspx

    Bonne lecture.

    Cordialement,
    Mathieu Francesch Sharplog Engineering www.sharplog.fr
    jeudi 31 décembre 2009 08:58
  • Bonjour Mathieu,

    Merci, toutefois je ne suis pas tellement avancé, car on peut rajouter des éléments, des composants, des ressources, certes, et une dll c'est quoi pour lui ?

    Et une fois empaqueté, qui dit qu'il va savoir où la mettre, ah ?

    Par défaut, je peux l'emballer en fichier ressource, et au premier lancement, si inexistant, lui faire reconstituer le fichier dll dans le répertoire de l'exe, ça marchera aussi mais bon... Dans le même régistre, je peux faire un exe en ressource qui va uniquement se spécialiser dans l'installation de la dll au bon endroit, nonobstant, je pense qu'il doit y avoir plus simple, car si j'en arrive là, ça revient presque à faire un emlpaquetage personnel...

    Cordialement

    Joe.

    jeudi 31 décembre 2009 13:12
  • Bonjour Joe,

    Lorsque vous ajoutez un projet de déploiement à votre solution, vous pouvez gérer le système de fichier de l'ordinateur cible. Pour ce faire, vous devez selectionner votre projet de déploiement (clic droit sur le projet > Affichage > Système de fichiers)

    Par défaut vous avez 3 dossiers :
    - DesktopFolder
    - ProgramMenuFolder
    - [ProgramFilesFolder][Manufacturer]\[ProductName]

    Vous pouvez ajouter des dossiers spéciaux (clic droit sur "Système de fichiers de l'ordinateur cible" > Ajouter un dossier spécial)
    En ce qui vous concerne, vous devez ajouter le Dossier System

    Pour finir, vous pouvez ajouter votre fichier wLanApi.dll dans ce dossier.

    Lorsque votre application s'installera sur l'ordinateur cible, ce fichier sera automatiquement installé sur c:\windows\system32

    J'espère que cela vous aidera.

    Cordialement,
    Mathieu Francesch Sharplog Engineering www.sharplog.fr
    jeudi 31 décembre 2009 13:39
  • Bonjour Mathieu,

    Merci, on avance, cependant on ne doit pas avoir la même version, alors je ne peux te suivre, voici ce que j'ai ici :

    http://cjoint.com/?bbknavg41V

    Alors, si tu peux reprendre tes explications avec ma version, je t'en remercie ?

    Et... meilleurs voeux pour 2010, cordialement.

    Joe.

    vendredi 1 janvier 2010 09:17
  • Bonjour et bonne année 2010 !

    Je n'arrive pas à visualiser votre image.

    vous pouvez me la transmettre sur mfh @ sharplog . fr

    D'avance merci,

    Mathieu
    Mathieu Francesch Sharplog Engineering www.sharplog.fr
    vendredi 1 janvier 2010 09:27
  • RE bonjour Joe,

    Je constate que vous êtes sous Visual Studio 2008 Express et il n'existe pas de template de projet de déploiement pour cette version de VS.

    Il vous reste comme possibilité l'utilisation de ClickOnce.

    Dans votre cas si vous utilisez ClickOnce vous avez deux options :

    1- Créer un package personnalisé pour votre DLL (cette opération est un peu complexe pour une simple copie de dll dans votre cas)
    2- Ajouter votre fichier wLanApi.dll dans votre projet
    Dans les propriétés de ce fichier :
    Action de génération : Contenu
    Copier dans le répertoire de sortie : Copier si plus récent

    Lorsque votre déploiement sera terminé sur le poste cible votre fichier se trouvera dans le dossier d'execution (Application.StartupPath)

    Vous pouvez maintenant copier par programmation votre fichier dans C:\windows\system32 (s'il n'y est pas déjà)

    Pour information, vous souhaitez contrôler la mise à jour de vos applications, vous pouvez utiliser la classe ApplicationDeployment

    Cordialement,


    Mathieu Francesch Sharplog Engineering www.sharplog.fr
    vendredi 1 janvier 2010 12:19
  • Ah Mathieu,

    Hum... pas évident ça, car si j'installe la dll je ne sais trop comment ça se passe, si par exemple la version n'est pas la même, faut bque je teste, je ne sais comment, si par exemple elle est déjà en place, faut que je teste, ça je pense pouvoir avec FileExist, mais si la sécurité de Vista par exemple me bloque, ou demande à celui qui reçoit la dll son autorisation... assez incertain pour moi ça, je ne sais pas non plus lui passer en ligne le chemen avec "USER" en variable d'environnement "c:\%user%\Windows\System32\" ?

    Non, ce que je vais faire alors, c'est l'embarquer en ressource (la dll), puis la débarquer au 1er lancement si fichierinexIstant, ensuite à chaque démarrage si fichierExistant, je saute. Elle sera au chaud dans son répertoire avec son exe principal, elle marchera et l'exe commencera par chercher dans son propre répertoire...
    Mais... j'ai un problème :
    J'arrive à monter la dll en ressource, oui mais... après ? Ceci, c'est à l'aller, mais ensuite je la débarque comment ? Car je ne connais pas vbNet ?
    Sous vb6 c'était ça (on montait l'explorateur de ressource, et on la déclarait CUSTOM + n° ordre), et pour la sortir :

      Dim extrait() As Byte ' extraction ressource
      Dim p01a As Long
      ChDrive App.Path
      ChDir App.Path
      extrait = LoadResData(2000, "CUSTOM") ' (2000) = id selon ressource
      p01a = FreeFile
      Open "Lune_extrait.txt" For Binary As p01a ' sur disque nouveau ou même nom
        Put #p01a, 1, extrait ' va écrire le contenu avec le nom de fic sur disque
      Close p01a

    Mais en vbNet on sort une ressource comment, je te prie ?

    Cordialement.

    Joe.
    • Modifié EhJoe vendredi 1 janvier 2010 19:01 1
    vendredi 1 janvier 2010 18:55
  • Joe,

    Vous pouvez accéder à vos ressources de la manière suivante :

    My.Resources.[Nom de votre ressource]

    Pour une Dll, votre ressource sera de type Byte()

    Si vous souhaitez convertir votre ressource en fichier vous pouvez faire ainsi :

    File.WriteAllBytes("c:\MaDll.dll", My.Resources.MaRessource())

    Cordialement,


    Mathieu Francesch Sharplog Engineering www.sharplog.fr
    vendredi 1 janvier 2010 19:36
  • Mathieu,

    On avance, c'est presque ça, j'ai écrit :


    Imports

     

    System.IO

    ...

    File.WriteAllBytes(

    My.Application.Info.DirectoryPath, My.Resources.wlanapi())


    Mais il se plante, erreur programme :

    L'accès au chemin d'accès 'C:\Users\joe\Documents\Visual Studio 2008\Projects\3gusb\bin\Debug' est refusé.

    Ah ah, c'était trop simple, que fais-je, de grâce ?

    Cordialement.

    Joe.

    ---------------

    L'exception System.UnauthorizedAccessException n'a pas été gérée
      Message="L'accès au chemin d'accès 'C:\Users\joe\Documents\Visual Studio 2008\Projects\3gusb\bin\Debug' est refusé."
      Source="mscorlib"
      StackTrace:
           à System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
           à System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy)
           à System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share)
           à System.IO.File.WriteAllBytes(String path, Byte[] bytes)
           à nativewifi.form1.form1_Load(Object sender, EventArgs e) dans C:\Users\joe\Documents\Visual Studio 2008\Projects\3gusb\Form1.vb:ligne 73
           à System.EventHandler.Invoke(Object sender, EventArgs e)
           à System.Windows.Forms.Form.OnLoad(EventArgs e)
           à System.Windows.Forms.Form.OnCreateControl()
           à System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
           à System.Windows.Forms.Control.CreateControl()
           à System.Windows.Forms.Control.WmShowWindow(Message& m)
           à System.Windows.Forms.Control.WndProc(Message& m)
           à System.Windows.Forms.ScrollableControl.WndProc(Message& m)
           à System.Windows.Forms.ContainerControl.WndProc(Message& m)
           à System.Windows.Forms.Form.WmShowWindow(Message& m)
           à System.Windows.Forms.Form.WndProc(Message& m)
           à System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
           à System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
           à System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
           à System.Windows.Forms.SafeNativeMethods.ShowWindow(HandleRef hWnd, Int32 nCmdShow)
           à System.Windows.Forms.Control.SetVisibleCore(Boolean value)
           à System.Windows.Forms.Form.SetVisibleCore(Boolean value)
           à System.Windows.Forms.Control.set_Visible(Boolean value)
           à System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
           à System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
           à System.Windows.Forms.Application.Run(ApplicationContext context)
           à Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
           à Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
           à Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)
           à nativewifi.My.MyApplication.Main(String[] Args) dans 17d14f5c-a337-4978-8281-53493378c1071.vb:ligne 81
           à System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
           à System.AppDomain.nExecuteAssembly(Assembly assembly, String[] args)
           à System.Runtime.Hosting.ManifestRunner.Run(Boolean checkAptModel)
           à System.Runtime.Hosting.ManifestRunner.ExecuteAsAssembly()
           à System.Runtime.Hosting.ApplicationActivator.CreateInstance(ActivationContext activationContext, String[] activationCustomData)
           à System.Runtime.Hosting.ApplicationActivator.CreateInstance(ActivationContext activationContext)
           à System.Activator.CreateInstance(ActivationContext activationContext)
           à Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssemblyDebugInZone()
           à System.Threading.ThreadHelper.ThreadStart_Context(Object state)
           à System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
           à System.Threading.ThreadHelper.ThreadStart()
      InnerException:

    vendredi 1 janvier 2010 19:53
  • Il y a juste une petite modification a apporter à votre code : 

    File.WriteAllBytes(My.Application.Info.DirectoryPath + "\wlanapi.dll", My.Resources.wlanapi())

    Et cela devrait fonctionner.

    Cordialement,


    Mathieu Francesch Sharplog Engineering www.sharplog.fr
    vendredi 1 janvier 2010 20:07
  • Cher Mathieu, chat marche comme dirait mon chat, qui est en fait une chatte :

    File.WriteAllBytes(

    My.Application.Info.DirectoryPath + "\wlanapi.dll", My.Resources.wlanapi())

    Je remercie ton génial génie, y a juste avec Debug (dans "Bin") que ça ne veut pas écrire, mais ce n'est pas important, car j'ai déplacé l'exe pour voir, et il écrit bien la dll (extrait) = résolu !

    Très cordialement :o)

    Joe.


    Cordialement. Joe http://irolog.free.fr . .
    • Marqué comme réponse EhJoe vendredi 1 janvier 2010 22:24
    • Modifié EhJoe vendredi 1 janvier 2010 22:26 1
    vendredi 1 janvier 2010 22:23