Creer programme autonome exemple

Soyez le premier à donner votre avis sur cette source.

Snippet vu 16 751 fois - Téléchargée 30 fois

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

Ajouter un commentaire

Commentaires

Messages postés
385
Date d'inscription
lundi 27 février 2006
Statut
Membre
Dernière intervention
21 août 2015
2
pourquoi pas intégrer toul les dll's et ocx'x necéssaire pour l'appliclation avcel le exe ,dans un fichier auto extatible en utilisons Iexpress inclus dans system32 ?
Messages postés
1
Date d'inscription
dimanche 3 juillet 2005
Statut
Membre
Dernière intervention
3 juillet 2005

ecrire les fonction suivantes :
*la fonction <> qui doit recevoir comme argiment la quantité et le prix unitaire d'une désignation et doit renvoyer leur leur produit
*la fonction <<taux_remise>> qui doit recevoir come argument le montant total hors taxes et doit renvoyer une valeur réelle corespendante au taux de remise selon le baréme suivant:
montant total HT TAUX DE REMISE
moins de 1000 0
entre 1000 et 1500 2
entre 1500 et 2000 5
plus que 2000 10

*la fonction <<net_commercial>> qui doit recevoire comme argument le montant total hors taxes et le taux de remise et doit renvoyer une valeur correspendante au net commercial en utlisant la régle de gestion suivante :
net commercial=montant total HT*(1-taux de remise)
la fonction <<tva>> qui doit recevoir comme arguments le net commercial et le taux de TVA et doit renvoyer une valeur correspondant au Montant Total TTC en utilisant la régle de gestion suivante :
TVA=Net Commercial*taux-TVA
*la fonction <<ttc>> qui doit recevoir comme le net commercial et le Taux de TVA et doit renvoyer une valeur correspondant au Montant Total TTC en utilisant la régle suivante:
montant Total TTC=net commercial +Montant de TVA
Messages postés
2
Date d'inscription
mardi 16 décembre 2003
Statut
Membre
Dernière intervention
7 avril 2013

Salut tous le monde, j'ai un problème avec ce code. En effet, le fichier généré ne correspond pas à l'original. VB ajout 12 caracteres en debut de fichier. je ne comprend pas d'où cela peut provenir ! J'utilise bien la fonction "Put" pour écrire dans le fichier de destination et la DLL est bien enregistrée en donnée CUSTOM dans le fichier resource joint au projet VB. Si quelqu'un a la solution, merci pour votre aide ...
Messages postés
222
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
30 juin 2008

ouais, pour un ctrl active x, on peut le faire extraire en passant par sub main dans un module. Tant que le form qui contient le contrôle manquant n'est pas éxécuté ... mais pour ce qui est de msvbvm60.dll, OUBLIEZ ÇA!!! Je me demande SI on pourrais créer un module C++ qui contiendrait une procédure qui serait éxécuté comme point d'entré avant celle de VB et il lui donnerait le contrôle après avoir extrait le stock ...
Messages postés
4531
Date d'inscription
dimanche 29 septembre 2002
Statut
Modérateur
Dernière intervention
22 avril 2019
8
"Le serpent qui se mort la queue"

Pour copier les runtimes des ressources vers le disque il faut lancer l'exe... Pour lancer l'exe il faut les runtimes...

Cherchez l'erreur !
Afficher les 16 commentaires

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.