Creer programme autonome exemple

Contenu du snippet

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

A voir également

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.