IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Modification de fichier MSI en VB.NET


Sujet :

VB.NET

  1. #1
    Candidat au Club
    Inscrit en
    Septembre 2007
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    Depuis un petit moment je réalise un programme pour modifier les fichiers msi (windows installer) en VB.Net (Pour info j'ai appris sur le tas le VB.Net et donc certains termes et méthodes utilisés risquent peut être de vous "choquer").

    Après pas mal de recherche il m'a semblé que je n'avais que 2 méthodes possibles pour modifier les fichiers msi en VB.Net

    L'utilisation des API en utilisant du code non managé (c'est bien comme ça que ça s'appelle?) du style:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Public Declare Function MsiOpenDatabase Lib "msi.dll" Alias "MsiOpenDatabaseA"( _
           ByVal szFileName   As String,  _
           ByVal iPersistMode As Integer, _
           ByRef hDatabase    As Long     _
           ) As Integer
    Ou bien la 2ème solution qui pour moi est plus simple mais peut être moins propre, l'utilisation du code vbs dans mon projet VB.NET, exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    Const msiOpenDatabaseModeTransact = 1
     
    Dim objInstaller : Set objInstaller = CreateObject("WindowsInstaller.Installer")
    Dim objDb : Set objDb = objInstaller.OpenDatabase("fichier.msi", msiOpenDatabaseModeTransact)
    Dim strSQL : strSQL = "INSERT INTO Property (Property, Value) VALUES ('TEST', 'OK')"
     
    Set objView = objDb.OpenView(strSQL)
     
    objView.Execute
     
    Set objView = Nothing
    objDb.Commit
     
    Set objDb = Nothing
    Set objInstaller = Nothing
    J'ai préféré partir sur la 2e méthode, qui fonctionne bien, sauf que tant que mon application est ouverte, mon fichier Msi est considéré comme ouvert (je ne peux pas le déplacer, l'éditer) malgré la libération de la variable objDb, alors que le problème ne se produit pas dans un script vbs.

    J'ai bien des solutions de contournement mais j'aimerais résoudre ce problème. J'ai aussi trouvé une référence Windows Installer Object Library mais j'ai une erreur quand j'essaie de la rajouter et lors de mes recherches il ne m'a pas semblé être tombé sur des cas où cette référence était utilisé.

    Savez vous d'où pourrais venir mon problème avec le vbs? Serait il mieux de passer par les API? Si oui je n'y comprends pas grand chose, j'ai trouvé le site pinvoke où toutes les méthodes sont listés mais leur appel est le plus souvent décrit en C et les paramètres d'entrés ne sont pas décrits. Y a t il un moyen d'avoir plus d'info sur les paramètres d'entrés?

    Pour info j'ai conulté le tuto suivant, où il est question d'un fichier Win32.hlp, que j'ai récupérer mais il n'y a aucune référence à ma dll msi

    En espèrant que mon message est compréhensible . Merci d'avance

    [EDIT 1]
    Mdr
    En rédigeant ce message, je me suis rendu compte que je n'avais pas beaucoup exploré la piste de la référence COM.

    Je viens juste de résoudre le problème d'erreur de l'ajout de la référence grâce à la commande

    TlbImp.exe msi.dll

    Cette commande m'a généré une dll que j'ai pu ajouter en tant que référence et à priori je peux créer des objets windowsInstaller.

    Je fais quelques test avant de passer le sujet en résolu.

    [EDIT 2]
    Ca ne marche pas mieux...
    Après la libération des objets objDb et objInstaller je ne peux toujours pas déplcar mon fichier MSI, j'ai essayé avec GC.SuppressFinalize mais ca n'a rien changé.

    Avez vous une idée pour que je puisse libérer mon fichier afin de le déplacer?

    Merci d'avance

  2. #2
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Je ne connais pas grand chose à Windows Installer. La seule idée qui me vient c'est de te demander si tu as le SDK de Windows Installer:


    https://www.microsoft.com/en-us/down...s.aspx?id=3138
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  3. #3
    Candidat au Club
    Inscrit en
    Septembre 2007
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Bonjour ,

    Merci de ta réponse.

    Non je ne pense pas qu'il soit installé sur mon poste, je vais voir pour l'installer.

    Oui je me doute qu'il n'y a pas grand monde qui manipule Windows Installer. Ce que je ne comprends pas c'est qu'avec le code que j'utilise, je peux faire tout ce que je veux sur mon fichier MSI, mon seul problème c'est que lors de la libération de l'objet mon MSI est toujours ouvert. Une fois que je ferme mon appli, mon MSI est accessible et les modifications ont bien été effectués. Ne connaissant pas tout du vb.net, j'espérais qu'il y ai une commande miracle pour détruire mon objet, car pour moi le problème doit venir de là.

    [EDIT1]
    Je viens d'installer le SDK, mais malheureusement aucun changement.

Discussions similaires

  1. Réponses: 0
    Dernier message: 26/06/2012, 16h26
  2. Modification de fichier XML sous vb.net 2008
    Par turican2 dans le forum VB.NET
    Réponses: 2
    Dernier message: 14/03/2009, 15h46
  3. Réponses: 2
    Dernier message: 08/08/2007, 19h58
  4. [VB.NET] Dotfuscator, deploiement fichier MSI
    Par arno2000 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 25/02/2005, 18h22
  5. [VB.NET] Installation : lire le path du fichier .msi
    Par Berns dans le forum Windows Forms
    Réponses: 3
    Dernier message: 14/09/2004, 22h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo