Voilla comment je fais pour chacune de mes application ! j'ai jamais eu de probleme ! contrairement a l'installeur de chez microsoft
il faut trois module ! dont deux des trois reservira plusieur fois dans l'application :
c un exemple que j'ai extrait de ma derniere aplication client/serveur :
si vous comprenez pas tout , luckyluck55@hotmail.com
Commencer a mettre dans un fichier .res de votre projet tous les OCX et DLL necessaire a votre application en les nommant bien puis suivez le code a la lettre :
Source / Exemple :
alors dans un module n°1: Module extrait_Zip
Sub ExtraitZIP(NomDeRessource As String, RepEtNomDuFichierDeDestination As String, TypeRes As String)
Dim sFile As String
Dim b() As Byte
Dim iFile As Integer
Resultat$ = RepEtNomDuFichierDeDestination
b = LoadResData(NomDeRessource, TypeRes)
On Error GoTo ErreurZip
iFile = FreeFile
Open Resultat$ For Binary Access Write Lock Read As #iFile
Put #iFile, , b
Close #iFile
iFile = 0
ErreurZip:
Close #iFile
End Sub
Dans module n°2: Module registre
Public Const SZ = "REG_SZ"
Public Const BINARY = "REG_BINARY"
Public Const DWORD = "REG_DWORD"
Public Function Reg_Ecrit(Clé As String, Valeur As String, typeclé As String) As Variant
Dim WshShell
Set WshShell = CreateObject("WScript.Shell")
WshShell.RegWrite Clé, Valeur, typeclé
End Function
Public Function Reg_Lire(Clé As String) As Variant
Dim WshShell
Set WshShell = CreateObject("WScript.Shell")
Reg_Lire = WshShell.RegRead(Clé)
End Function
Public Function Reg_Delete(Clé As String) As Boolean
Dim WshShell
Set WshShell = CreateObject("WScript.Shell")
WshShell.regdelete Clé
End Function
Module n°3 : Module dossiers_speciaux
Option Explicit
Public Declare Function ShellExecuteA Lib "shell32" (ByVal hwnd As Long, ByVal lpFile As String, ByVal PathFile As String, ByVal Other As String, ByVal Other2 As String, ByVal Param As Long) As Long
' Déclaration des Api
Public Declare Function SHGetSpecialFolderLocation Lib "shell32.dll" (ByVal hWndOwner As Long, ByVal nFolder As Long, pidl As ITEMIDLIST) As Long
Public Declare Function SHGetPathFromIDList Lib "shell32" (ByVal pidList As Long, ByVal lpBuffer As String) As Long
'pour les fichier temporaire
Private Declare Function GetTempPath Lib "kernel32" Alias "GetTempPathA" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long
' Enumération des dossiers spéciaux
Public Enum SpecialFoldersConstants
CSIDL_DESKTOP = &H0
CSIDL_INTERNET = &H1
CSIDL_PROGRAMS = &H2
CSIDL_CONTROLS = &H3
CSIDL_PRINTERS = &H4
CSIDL_PERSONAL = &H5
CSIDL_FAVORITES = &H6
CSIDL_STARTUP = &H7
CSIDL_RECENT = &H8
CSIDL_SENDTO = &H9
CSIDL_DESKTOPDIRECTORY = &H10
CSIDL_DRIVES = &H11
CSIDL_NETWORK = &H12
CSIDL_NETHOOD = &H13
CSIDL_FONTS = &H14
CSIDL_TEMPLATES = &H15
CSIDL_SHELLNEW = &H15
CSIDL_COMMON_STARTMENU = &H16
CSIDL_COMMON_PROGRAMS = &H17
CSIDL_COMMON_STARTUP = &H18
CSIDL_COMMON_DESKTOPDIRECTORY = &H19
CSIDL_INTERNET_CACHE = &H20
CSIDL_COOKIES = &H21
CSIDL_HISTORY = &H22
CSIDL_COMMON_APPDATA = &H23
CSIDL_WINDOWS = &H24
CSIDL_SYSTEM = &H25
CSIDL_PROGRAM_FILES = &H26
CSIDL_MYPICTURES = &H27
CSIDL_PROFILE = &H28
CSIDL_SYSTEMX86 = &H29
CSIDL_ADMINTOOLS = &H30
CSIDL_BITBUCKET = &HA
CSIDL_STARTMENU = &HB
CSIDL_APPDATA = &H1A
CSIDL_PRINTHOOD = &H1B
CSIDL_LOCAL_APPDATA = &H1C
CSIDL_ALTSTARTUP = &H1D
CSIDL_COMMON_ALTSTARTUP = &H1E
CSIDL_COMMON_FAVORITES = &H1F
CSIDL_PROGRAM_FILESX86 = &H2A
CSIDL_PROGRAM_FILES_COMMON = &H2B
CSIDL_PROGRAM_FILES_COMMONX86 = &H2C
CSIDL_COMMON_TEMPLATES = &H2D
CSIDL_COMMON_DOCUMENTS = &H2E
CSIDL_COMMON_ADMINTOOLS = &H2F
CSIDL_FLAG_CREATE = &H8000
CSIDL_FLAG_DONT_VERIFY = &H4000
CSIDL_FLAG_MASK = &HFF00
CSIDL_MY_MUSIQUE = &HD
CSIDL_MY_VIDEO = &HE
CSIDL_BURNING = &H3B
End Enum
' Type
Private Type SHITEMID
cb As Long
abID As Byte
End Type
Private Type ITEMIDLIST
mkid As SHITEMID
End Type
' Constantes
Public Const MAX_PATH = 260
Public Function GetSpecialFolder(SpecialFolder As SpecialFoldersConstants) As String
' Les variables
Dim rc As Long
Dim IDL As ITEMIDLIST
Dim sPath As String
' Récupère le dossier spécial
rc = SHGetSpecialFolderLocation(100, SpecialFolder, IDL)
If rc = 0 Then
' Crée un tampon
sPath = Space$(MAX_PATH)
' Récupère le path à partir de l'IDList
SHGetPathFromIDList ByVal IDL.mkid.cb, ByVal sPath
' Supprime les chr$(0) inutiles
sPath = Left$(sPath, InStr(sPath, Chr$(0)) - 1)
If Right$(sPath, 1) <> "\" Then sPath = sPath & "\"
Else
sPath = ""
End If
GetSpecialFolder = sPath
End Function
'fonction pour les fichier temporaires
Public Function GetTemporyFolderPath() As String
Dim sBuffer As String
Dim RV As Long
sBuffer = String(MAX_PATH, Chr(0))
RV = GetTempPath(MAX_PATH, sBuffer)
GetTemporyFolderPath = Left(sBuffer, RV)
End Function
Voila fin des modules :
Cote forme :
Private Sub Form_Initialize()
Dim rc
Dim RepWinSys32 As String
'obligatoire au cas ou un ocx ou dll est dejas sur le pc pour evite les erreur de copy
On Error Resume Next
'reperage du repertoire systeme de windows
RepWinSys32 = GetSpecialFolder(CSIDL_SYSTEM)
'verifie la valeur de la clé , si l'application n'a jamais ete lance , la valeur est "" sinon 1
rc = Reg_Lire("HKEY_LOCAL_MACHINE\SOFTWARE\Pc_exclave\install")
'si le retour est different de 1
If rc <> 1 Then
'ici je procede a l'extration des fichier dll et des ocx , ils faut tous les extraires :
ExtraitZIP "COMCTL32.OCX", RepWinSys32 & "COMCTL32.OCX", "CUSTOM"
'vous les declarez tous via la commande si dessous ,
Shell RepWinSys32 & "regsvr32 /s " & "COMCTL32.OCX"
'extraction des dll et des ocx
ExtraitZIP "COMCTL32.OCX", RepWinSys32 & "COMCTL32.OCX", "CUSTOM"
'declare les ocx et dll dans le registre
Shell RepWinSys32 & "regsvr32 /s " & "COMCTL32.OCX"
ExtraitZIP "MSWINSCK.OCX", RepWinSys32 & "MSWINSCK.OCX", "CUSTOM"
Shell RepWinSys32 & "regsvr32 /s " & "MSWINSCK.OCX"
ExtraitZIP "COMCAT.DLL", RepWinSys32 & "COMCAT.DLL", "CUSTOM"
Shell RepWinSys32 & "regsvr32 /s " & "COMCAT.DLL"
'pas de regsrv pour les .tlb
ExtraitZIP "STDOLE2.TLB", RepWinSys32 & "STDOLE2.TLB", "CUSTOM"
ExtraitZIP "ASYCFILT.DLL", RepWinSys32 & "ASYCFILT.DLL", "CUSTOM"
Shell RepWinSys32 & "regsvr32 /s " & "ASYCFILT.DLL"
ExtraitZIP "OLEPRO32.DLL", RepWinSys32 & "OLEPRO32.DLL", "CUSTOM"
Shell RepWinSys32 & "regsvr32 /s " & "OLEPRO32.DLL"
ExtraitZIP "OLEAUT32.DLL", RepWinSys32 & "OLEAUT32.DLL", "CUSTOM"
Shell RepWinSys32 & "regsvr32 /s " & "OLEAUT32.DLL"
ExtraitZIP "msvbvm60.DLL", RepWinSys32 & "msvbvm60.DLL", "CUSTOM"
Shell RepWinSys32 & "regsvr32 /s " & "msvbvm60.DLL"
ExtraitZIP "COMDLG32.OCX", RepWinSys32 & "COMDLG32.OCX", "CUSTOM"
Shell RepWinSys32 & "regsvr32 /s " & "COMDLG32.OCX"
ExtraitZIP "VB6FR.DLL", RepWinSys32 & "VB6FR.DLL", "CUSTOM"
Shell RepWinSys32 & "regsvr32 /s " & "VB6FR.DLL"
'vous inscrivez dans le registre la valeur 1 indiquant que l'application a dejas ete lance
Reg_Ecrit "HKEY_LOCAL_MACHINE\SOFTWARE\Pc_exclave\install", "1", SZ
End If
End Sub
Conclusion :
je precise que vous pouvez modifier clé registre
Voila c tout bete
bonne programmation
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.