tich3012
Messages postés39Date d'inscriptionlundi 2 décembre 2002StatutMembreDernière intervention15 octobre 2004
-
25 mai 2004 à 13:40
cs_BLU
Messages postés16Date d'inscriptionjeudi 11 juillet 2002StatutMembreDernière intervention31 juillet 2008
-
26 mai 2004 à 22:04
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
cs_BLU
Messages postés16Date d'inscriptionjeudi 11 juillet 2002StatutMembreDernière intervention31 juillet 2008 26 mai 2004 à 22:04
J'avoue ...
Au départ il s'agissait en fait d'une réponse à une question mais la date du post était de 2003 ...
Au dernier moment j'ai préféré le pousser en trucs et astuces sur le site. Je ne pensais pas vraiment attirer autant de commentaire.
Pour ceux que cela intéresse en fait un fichier MSI n'est pas autre chose qu'une base de données.
Elle stocke entre autre l'arborescence, les fichiers, les dll, la registerie, les icônes et shurtcut, les ODBC ... d'une application a installer. Avec un peu de SQL et les objets, méthodes, propriétés exportés par MSI.DLL un peu obtenir une interface comme décrit dans la capture.
Je sort juste de formation sur AdminStudio d'InstallShield (Effectivement produit payant mais dans le cadre de grande société, le setup dit classique ne suffit pas. ), je commence tout juste le soft que je montre en capture. De plus Windows Installer propose le principe du roll back pendant l'installation et surtout l'autoréparation en cas de problème.
Il reste encore beaucoup de choses a coder : seul les deux premiers onglets sont codés.
Ceux qui veulent vraiment le source n'ont qu'à me demander par mail.
J’vois pas trop l'intérêt de mettre la source pour l'instant en ligne tant qu'elle n'est pas plus avancée.
Désolé d'avoir mis l'eau à la bouche pour certain ...
Sinon la base du code est du genre
'Penser a rajouter la référence MSI.DLL dans votre projet
Global MSI_DB As WindowsInstaller.Database
Global MSI_Obj As WindowsInstaller.Installer
Global MSI_InfoFeature As WindowsInstaller.FeatureInfo
Global MSI_InfoSummary As WindowsInstaller.SummaryInfo
Global MSI_RecordSet As WindowsInstaller.Record
Global MSI_Session As WindowsInstaller.Session
Global MSI_View As WindowsInstaller.View
Global MSI_Connected As Boolean
Global Const msiOpenDatabaseModeReadOnly = 0 'Opens a database read-only, no persistent changes.
Global Const msiOpenDatabaseModeTransact = 1 'Opens a database read/write in transaction mode.
Global Const msiOpenDatabaseModeDirect = 2 'Opens a database direct read/write without transaction.
Global Const msiOpenDatabaseModeCreate = 3 'Creates a new database, transact mode read/write.
Global Const msiOpenDatabaseModeCreateDirect = 4 'Creates a new database, direct mode read/write.
Global Const msiOpenDatabaseModePatchFile = 32 'Adds this flag to indicate a patch file.
Public Function fx_MSI_Connect(ByVal sMsiFile As String)
On Error Resume Next
Set MSI_Obj = CreateObject("WindowsInstaller.Installer")
Set MSI_DB = MSI_Obj.OpenDatabase(sMsiFile, msiOpenDatabaseModeTransact)
If Err.Number <> 0 Then
fx_MSI_Connect = False
MSI_Connected = False
objMsiDB = Nothing
MSI_DB = Nothing
Else
fx_MSI_Connect = True
MSI_Connected = True
End If
End Function
'N'ayant pas trouvé le moyen de mettre en relation la base MSI avec le code via un connecteur (DATA ou Remote_DATA) je stocke la liste des tables dans un tableau de string ...
Public Sub fx_LoadMSI_Tables()
On Error Resume Next
Dim i As Integer
ReDim Preserve tabMSI_Tables(0)
Set MSI_View = MSI_DB.OpenView("SELECT * FROM _Tables")
MSI_View.Execute
Set MSI_RecordSet = MSI_View.Fetch
Do While Err.Number = 0
ReDim Preserve tabMSI_Tables(i)
tabMSI_Tables(i) = MSI_RecordSet.StringData(1)
'Debug.Print MSI_RecordSet.StringData(1); "Status = "; MSI_RecordSet
i = i + 1
Set MSI_RecordSet = MSI_View.Fetch
Loop
If Err.Number = 91 Then Exit Sub
End Sub
Voilà pour le début ...
A+
Blu
Bazinou
Messages postés9Date d'inscriptionjeudi 3 juillet 2003StatutMembreDernière intervention26 mai 2004 26 mai 2004 à 09:26
Oui, il est vrai qu'InnoSetup est très bien. Je conseille également ISTool (interface graphique d'InnoSetup) et InnoScript. Ce dernier permet de générer des .iss (projet InnoSetup) depuis un .vbp ou un .lst. Perso je préfère travailler depuis le .lst généré par l'Assistant Empaquetage & déploiement de VB.
++
Bazinou
jmlucienvb
Messages postés129Date d'inscriptionmercredi 24 septembre 2003StatutMembreDernière intervention12 février 2009 26 mai 2004 à 08:43
Salut Dark...En forme je vois !
Je vais télécharger innosetup pour essayer...connaisais pas !
Amitiés
Jmluc
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 26 mai 2004 à 08:21
Cela suffit ? En tout cas, je conseille d'utiliser InnoSetup pour créer des installation, c'est très simple, très puissant, et c'est gratuit !
DarK Sidious
jmlucienvb
Messages postés129Date d'inscriptionmercredi 24 septembre 2003StatutMembreDernière intervention12 février 2009 26 mai 2004 à 07:40
Tu as mis l'eau à la bouche...
Reste à verser le liquide !
cs_Napster
Messages postés76Date d'inscriptiondimanche 14 septembre 2003StatutMembreDernière intervention19 septembre 2009 25 mai 2004 à 22:29
manque la source pour mieux visualisez ,(mieux codez mieux visualizes............ben fait une petit source .
thierrydelepine
Messages postés521Date d'inscriptionmardi 24 décembre 2002StatutMembreDernière intervention11 septembre 20086 25 mai 2004 à 14:21
Pourrait tu donner plus d'explications ou un petit bout de code d'exemple, cela me parait interressant mais j'aimerai en savoir plus sur les possibilitées de cet ajout de reference.
De ce que je comprend on peut lancer la diffusion d'un package MSI en une ligne de code VB ??
Merci.
tich3012
Messages postés39Date d'inscriptionlundi 2 décembre 2002StatutMembreDernière intervention15 octobre 2004 25 mai 2004 à 13:40
26 mai 2004 à 22:04
Au départ il s'agissait en fait d'une réponse à une question mais la date du post était de 2003 ...
Au dernier moment j'ai préféré le pousser en trucs et astuces sur le site. Je ne pensais pas vraiment attirer autant de commentaire.
Pour ceux que cela intéresse en fait un fichier MSI n'est pas autre chose qu'une base de données.
Elle stocke entre autre l'arborescence, les fichiers, les dll, la registerie, les icônes et shurtcut, les ODBC ... d'une application a installer. Avec un peu de SQL et les objets, méthodes, propriétés exportés par MSI.DLL un peu obtenir une interface comme décrit dans la capture.
Je sort juste de formation sur AdminStudio d'InstallShield (Effectivement produit payant mais dans le cadre de grande société, le setup dit classique ne suffit pas. ), je commence tout juste le soft que je montre en capture. De plus Windows Installer propose le principe du roll back pendant l'installation et surtout l'autoréparation en cas de problème.
Il reste encore beaucoup de choses a coder : seul les deux premiers onglets sont codés.
Ceux qui veulent vraiment le source n'ont qu'à me demander par mail.
J’vois pas trop l'intérêt de mettre la source pour l'instant en ligne tant qu'elle n'est pas plus avancée.
Désolé d'avoir mis l'eau à la bouche pour certain ...
Sinon la base du code est du genre
'Penser a rajouter la référence MSI.DLL dans votre projet
Global MSI_DB As WindowsInstaller.Database
Global MSI_Obj As WindowsInstaller.Installer
Global MSI_InfoFeature As WindowsInstaller.FeatureInfo
Global MSI_InfoSummary As WindowsInstaller.SummaryInfo
Global MSI_RecordSet As WindowsInstaller.Record
Global MSI_Session As WindowsInstaller.Session
Global MSI_View As WindowsInstaller.View
Global MSI_Connected As Boolean
Global Const msiOpenDatabaseModeReadOnly = 0 'Opens a database read-only, no persistent changes.
Global Const msiOpenDatabaseModeTransact = 1 'Opens a database read/write in transaction mode.
Global Const msiOpenDatabaseModeDirect = 2 'Opens a database direct read/write without transaction.
Global Const msiOpenDatabaseModeCreate = 3 'Creates a new database, transact mode read/write.
Global Const msiOpenDatabaseModeCreateDirect = 4 'Creates a new database, direct mode read/write.
Global Const msiOpenDatabaseModePatchFile = 32 'Adds this flag to indicate a patch file.
Public Function fx_MSI_Connect(ByVal sMsiFile As String)
On Error Resume Next
Set MSI_Obj = CreateObject("WindowsInstaller.Installer")
Set MSI_DB = MSI_Obj.OpenDatabase(sMsiFile, msiOpenDatabaseModeTransact)
If Err.Number <> 0 Then
fx_MSI_Connect = False
MSI_Connected = False
objMsiDB = Nothing
MSI_DB = Nothing
Else
fx_MSI_Connect = True
MSI_Connected = True
End If
End Function
'N'ayant pas trouvé le moyen de mettre en relation la base MSI avec le code via un connecteur (DATA ou Remote_DATA) je stocke la liste des tables dans un tableau de string ...
Public Sub fx_LoadMSI_Tables()
On Error Resume Next
Dim i As Integer
ReDim Preserve tabMSI_Tables(0)
Set MSI_View = MSI_DB.OpenView("SELECT * FROM _Tables")
MSI_View.Execute
Set MSI_RecordSet = MSI_View.Fetch
Do While Err.Number = 0
ReDim Preserve tabMSI_Tables(i)
tabMSI_Tables(i) = MSI_RecordSet.StringData(1)
'Debug.Print MSI_RecordSet.StringData(1); "Status = "; MSI_RecordSet
i = i + 1
Set MSI_RecordSet = MSI_View.Fetch
Loop
If Err.Number = 91 Then Exit Sub
End Sub
Voilà pour le début ...
A+
Blu
26 mai 2004 à 09:26
++
Bazinou
26 mai 2004 à 08:43
Je vais télécharger innosetup pour essayer...connaisais pas !
Amitiés
Jmluc
26 mai 2004 à 08:21
DarK Sidious
26 mai 2004 à 07:40
Reste à verser le liquide !
25 mai 2004 à 22:29
25 mai 2004 à 14:21
De ce que je comprend on peut lancer la diffusion d'un package MSI en une ligne de code VB ??
Merci.
25 mai 2004 à 13:40