WindowsInstaller en .net

ShawLee Messages postés 3 Date d'inscription mercredi 16 janvier 2002 Statut Membre Dernière intervention 25 juillet 2006 - 24 juil. 2006 à 21:00
ShawLee Messages postés 3 Date d'inscription mercredi 16 janvier 2002 Statut Membre Dernière intervention 25 juillet 2006 - 25 juil. 2006 à 12:01
Bonjour,


je developpe en vb .net sur Windows 2000 et XP, et je suis confronté à un problème concernant l'utilisation de la dll "msi.dll"

Dès que je veux instancier l'objet, il génère à l'exécution une erreur .
Pourtant le même code fonctionne bien sous VBA et VB6
Si quelqu'un pouvait bien m'en donner l'explication, et comment contourner ce problème, cela m'aiderait énormement


D'autres part, y a-t-il des contraintes à l'utilisation d'une dll créé en VB6 sous Windows XP ?

Merci d'avance pour les réponses.
ShawLee

Ps : voici un exemple de code.

Public Function MSI_Connect(MsiFile As String)
    Set MSI_Obj = CreateObject("WindowsInstaller.Installer")
    Set MSI_DB = MSI_Obj.OpenDatabase(MsiFile, 0)
      
End Function


Sub GetProductCode()
Call MSI_Connect("MySetup.msi")

Dim sqlQuery As String
Dim i, index As Integer


sqlQuery = "SELECT Property, Value FROM Property WHERE Property='ProductCode'"

Set MSI_View = MSI_DB.OpenView(sqlQuery)
MSI_View.Execute
i = 1


Set MSI_RecordSet = MSI_View.Fetch
While Not MSI_RecordSet Is Nothing
  For index = 0 To MSI_RecordSet.FieldCount
    msgbox  MSI_RecordSet.StringData(index)
  Next
  i = i + 1
  Set MSI_RecordSet = MSI_View.Fetch
Wend


End Sub

3 réponses

drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
25 juil. 2006 à 08:23
Salut
Déjà ce que je peux te dire c'est que l'instruction Set n'est pas nécessaire en .Net.

 Drikce 06
0
cs_drahcir Messages postés 745 Date d'inscription mardi 30 novembre 2004 Statut Membre Dernière intervention 15 septembre 2009 4
25 juil. 2006 à 09:35
Salut,


ça ressemnble plus à du vb6 que du VB.NET!!!!


Le Set est en effet inutle, tout comme le Call... bref, là n'est pas la question.....


Quelle est ton erreur exactement?
0
ShawLee Messages postés 3 Date d'inscription mercredi 16 janvier 2002 Statut Membre Dernière intervention 25 juillet 2006
25 juil. 2006 à 12:01
En effet c'est du VB6. Je me suis trompé dans le copier-coller.


En fait, lorsque j'essaie d'instancier en vb.net une classe de msi.dll (par exemple installer)


Lorsque je tape


Dim myObj as windowsinstaller.installer


myObj = new windowsinstaller.installer


L'application génère une erreur à la compilation. Ce qui parait normal car cette dll ne contient que des interfaces.


J'ai voulu passer alors par 'createobject("windowsinstaller.installer")'. Et là, si l'exe est bien compilé, à l'execution, il génère l'erreur 'impossible de créer le composant activeX'.


Pas grave me dis-je, je vais contourner le problème en créant une dll en VB6, puis je vais l'importer via tlbimp. Là tout se passe bien, sauf que par la suite mon appli ne marche que sur des postes windows2k et non sur des postes XP ( si par exemple ma dll importée s'appelle msinet.dll qui contine la classe 'msiClass' l'erreur se déclenche à myClass = new msinet.msiClass l'instanciation d'une classe)  .

Ce qui m'a fait penser que XP n'aime pas trop les dll deVB6 ou quelque chose m'echappe. 


En résumé,il y a deux problèmes dans cette histoire et si quelqu'un avait la réponse à l'une des deux, cela me conviendrait (même si jaurais préféré utiliser la classe installer sans passer par VB6.

Merci d'avance pour ta réponse.
0
Rejoignez-nous