ShawLee
Messages postés3Date d'inscriptionmercredi 16 janvier 2002StatutMembreDernière intervention25 juillet 2006
-
24 juil. 2006 à 21:00
ShawLee
Messages postés3Date d'inscriptionmercredi 16 janvier 2002StatutMembreDernière intervention25 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
ShawLee
Messages postés3Date d'inscriptionmercredi 16 janvier 2002StatutMembreDernière intervention25 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.