Accueil > > > PATCHER LE COMPILATEUR VB6 POUR QU'IL COMPILE DES EXES AUTONOMES(SANS VB6FR.DLL)
PATCHER LE COMPILATEUR VB6 POUR QU'IL COMPILE DES EXES AUTONOMES(SANS VB6FR.DLL)
Information sur la source
Description
LinkMsvbvm60 2009 Deleplace Modifie le compilateur VB6 pour supprimer la dépendance à VB6FR.DLL il la remplace par la dépendance à MSVBVM60.DLL dont il déja dépendant comme MSVBVM60.DLL est présents sur tous les PC depuis XP(98 non 2000 sais pas) vos EXEs deviennent autonomes LinkMsvbvm60.exe est en même temps un programme d'installation un patch pour LINK.EXE un programme de désinstallation l'installation renomme ce fichier en _LINK.EXE et le remplace par une copie de LinkMsdmo.exe (sous le nom LINK.EXE) Si Vous désirez rendre autonomes des EXEs déja compilés utilisez UnVb6fr.exe (dans le Zip) Principe de fonctionnement LinkMsdmo.exe (renommé LINK.EXE) recoit les infos de compilations, les transmet à _LINK.EXE (le LINK original) puis patche l'EXE fabriqué par _LINK.EXE c'est à dire remplace la référence à VB6FR.DLL par MSVBVM60.DLL
Source
- Option Explicit
- Private Declare Function GetModuleFileNameA& Lib "kernel32.dll" (ByVal hModule&, ByVal lpFileName$, ByVal nSize&)
- Private Declare Function GetLongPathNameA& Lib "kernel32" (ByVal lpszShortPath$, ByVal lpszLongPath$, ByVal cchBuffer&)
- Private Type STARTUPINFO
- cb As Long
- lpReserved As Long
- lpDesktop As Long
- lpTitle As Long
- dwX As Long
- dwY As Long
- dwXSize As Long
- dwYSize As Long
- dwXCountChars As Long
- dwYCountChars As Long
- dwFillAttribute As Long
- dwFlags As Long
- wShowWindow As Integer
- cbReserved2 As Integer
- lpReserved2 As Long
- hStdInput As Long
- hStdOutput As Long
- hStdError As Long
- End Type
-
- Private Type PROCESS_INFORMATION
- hProcess As Long
- hThread As Long
- dwProcessID As Long
- dwThreadID As Long
- End Type
-
- Const STARTF_USESHOWWINDOW As Long = &H1
- Const SW_HIDE As Long = 0
-
- Private Const NORMAL_PRIORITY_CLASS As Long = &H20&
- Private Const INFINITE As Long = -1&
- Private Const STATUS_WAIT_0 As Long = &H0
- Private Const WAIT_OBJECT_0 As Long = STATUS_WAIT_0
- Private Declare Function CloseHandle& Lib "kernel32" (ByVal hObject As Long)
- Private Declare Function WaitForSingleObject& Lib "kernel32" (ByVal hProcess&, ByVal dwMilliseconds&)
- Private Declare Function InputIdle& Lib "user32" Alias "WaitForInputIdle" (ByVal hProcess&, ByVal dwMilliseconds&)
- Private Declare Function CreateProcessA& Lib "kernel32" (ByVal lpApplicationName&, _
- ByVal lpCommandLine$, ByVal lpProcessAttributes&, ByVal lpThreadAttributes&, _
- ByVal bInheritHandles&, ByVal dwCreationFlags&, ByVal lpEnvironment&, _
- ByVal lpCurrentDirectory$, lpStartupInfo As STARTUPINFO, _
- lpProcessInformation As PROCESS_INFORMATION)
-
- Dim MyEXEName$, OrgLINK$, HelpFile$
-
- Private Sub Form_Load()
- Dim Cmd$, EXEFile$, EndOfExe&, StartOfExe&, StringEXE$, VB5&, VB6FR&, I&
- Cmd = Command
- MyEXEName = Space(300)
- MyEXEName = Left(MyEXEName, GetModuleFileNameA(0, MyEXEName, 300))
- MyEXEName = LongPathName(MyEXEName)
- If UCase(Right(MyEXEName, 8)) = "\VB6.EXE" Then 'Exécution non compilié (Sous VB6)
- MyEXEName = App.Path & "\" & App.EXEName & ".exe"
- End If
- I = InStrRev(MyEXEName, "\")
- 'Si le programme se nomme LINK.EXE c'est le patch compilateur
- 'Sinon c'est l'installateur désinstallateur
- If UCase(Mid(MyEXEName, I)) <> "\LINK.EXE" Then PreVerif: Install_Uninstall: Exit Sub
- OrgLINK = Left(MyEXEName, I) & "_LINK.EXE"
- ShellWait """" & OrgLINK & """ " & Cmd, , True
- EndOfExe = InStr(UCase(Cmd), ".EXE""")
- If EndOfExe = 0 Then End
- StartOfExe = InStrRev(Cmd, """", EndOfExe) + 1
- EXEFile = Mid(Cmd, StartOfExe, EndOfExe + 4 - StartOfExe)
- If Dir(EXEFile) = "" Then End
- Open EXEFile For Binary As 1
- StringEXE = Space(LOF(1))
- Get 1, , StringEXE
- Boucle:
- VB5 = InStr(VB5 + 1, StringEXE, "VB5!")
- If VB5 Then
- VB6FR = VB5 + 6
- If Mid(StringEXE, VB6FR, 10) = "VB6FR.DLL" & Chr(0) Then
- Put 1, VB6FR, "MSVBVM60.DLL" 'Patch remplace VB6FR.DLL par MSVBVM60.DLL
- End
- Else
- GoTo Boucle
- End If
- Else
- End
- End If
- End Sub
-
- Private Sub PreVerif() ' destinée aux utilisateurs de Vista
- If Dir(LinkFile) = "" Then
- LinkFile = "D" & Mid(LinkFile, 2)
- If Dir(LinkFile) = "" Then LinkFile = "C:" & Mid(LinkFile, 17)
- End If
- End Sub
-
- Private Function Verif() As Boolean
- If UCase(Right(LinkFile, 9)) = "\LINK.EXE" Then
- OrgLINK = Left(LinkFile, Len(LinkFile) - 8) & "_LINK.EXE"
- Verif = True
- Else
- MsgBox "Doit se terminer par ""\LINK.EXE"""
- End If
- End Function
-
- Private Sub Install_Uninstall()
- HelpFile = Left(MyEXEName, Len(MyEXEName) - 3) & "hlp"
- If Dir(HelpFile) = "" Then Help.Caption = App.EXEName & ".hlp non trouvé": Help.Enabled = False
- If Not Verif Then Exit Sub
- If Len(Dir(LinkFile)) Then
- Label1.Visible = False
- Install.Enabled = (Dir(OrgLINK) = "")
- UnInstall.Enabled = Not Install.Enabled
- Else
- Label1.Visible = True
- Install.Enabled = False
- UnInstall.Enabled = False
- End If
- End Sub
-
- 'Comme SHELL mais attend la fin de l'execution
- Private Function ShellWait&(CommandLine$, Optional Path$ = vbNullString, Optional Hide As Boolean = False)
- Dim proc As PROCESS_INFORMATION
- Dim Start As STARTUPINFO
- With Start
- .cb = Len(Start)
- If Hide Then
- .dwFlags = STARTF_USESHOWWINDOW
- .wShowWindow = SW_HIDE
- End If
- End With
- CreateProcessA 0&, CommandLine, 0&, 0&, 1&, NORMAL_PRIORITY_CLASS, 0&, Path, Start, proc
- ShellWait = WaitForSingleObject(proc.hProcess, INFINITE)
- CloseHandle proc.hProcess
- End Function
-
- Private Function LongPathName$(ByVal ShortPath$)
- LongPathName$ = Space(1024)
- LongPathName$ = Left(LongPathName$, GetLongPathNameA(ShortPath, LongPathName$, 1024))
- End Function
-
- Private Sub Help_Click()
- Shell "Notepad """ & HelpFile & """", vbNormalFocus
- End Sub
-
- Private Sub LinkFile_Keypress(K%)
- If K = 13 Then Install_Uninstall ' si <Enter>
- End Sub
-
- Private Sub ChLINK_Click()
- Install_Uninstall
- End Sub
-
- Private Sub Install_Click()
- If Not Verif Then Exit Sub
- If Dir(MyEXEName) = "" Then MsgBox "Il faut compiler " & App.EXEName: Exit Sub
- On Error Resume Next
- FileCopy LinkFile, OrgLINK
- If Err = 0 Then FileCopy MyEXEName, LinkFile
- If Err Then MsgBox "l'Installation a échoué" Else MsgBox "Installé avec scccés"
- Install_Uninstall
- End Sub
-
- Private Sub UnInstall_Click()
- If Not Verif Then Exit Sub
- On Error Resume Next
- FileCopy OrgLINK, LinkFile
- If Err Then
- MsgBox "La désinstallation a échouée !"
- Else
- Kill OrgLINK: Install_Uninstall
- End If
- End Sub
Option Explicit
Private Declare Function GetModuleFileNameA& Lib "kernel32.dll" (ByVal hModule&, ByVal lpFileName$, ByVal nSize&)
Private Declare Function GetLongPathNameA& Lib "kernel32" (ByVal lpszShortPath$, ByVal lpszLongPath$, ByVal cchBuffer&)
Private Type STARTUPINFO
cb As Long
lpReserved As Long
lpDesktop As Long
lpTitle As Long
dwX As Long
dwY As Long
dwXSize As Long
dwYSize As Long
dwXCountChars As Long
dwYCountChars As Long
dwFillAttribute As Long
dwFlags As Long
wShowWindow As Integer
cbReserved2 As Integer
lpReserved2 As Long
hStdInput As Long
hStdOutput As Long
hStdError As Long
End Type
Private Type PROCESS_INFORMATION
hProcess As Long
hThread As Long
dwProcessID As Long
dwThreadID As Long
End Type
Const STARTF_USESHOWWINDOW As Long = &H1
Const SW_HIDE As Long = 0
Private Const NORMAL_PRIORITY_CLASS As Long = &H20&
Private Const INFINITE As Long = -1&
Private Const STATUS_WAIT_0 As Long = &H0
Private Const WAIT_OBJECT_0 As Long = STATUS_WAIT_0
Private Declare Function CloseHandle& Lib "kernel32" (ByVal hObject As Long)
Private Declare Function WaitForSingleObject& Lib "kernel32" (ByVal hProcess&, ByVal dwMilliseconds&)
Private Declare Function InputIdle& Lib "user32" Alias "WaitForInputIdle" (ByVal hProcess&, ByVal dwMilliseconds&)
Private Declare Function CreateProcessA& Lib "kernel32" (ByVal lpApplicationName&, _
ByVal lpCommandLine$, ByVal lpProcessAttributes&, ByVal lpThreadAttributes&, _
ByVal bInheritHandles&, ByVal dwCreationFlags&, ByVal lpEnvironment&, _
ByVal lpCurrentDirectory$, lpStartupInfo As STARTUPINFO, _
lpProcessInformation As PROCESS_INFORMATION)
Dim MyEXEName$, OrgLINK$, HelpFile$
Private Sub Form_Load()
Dim Cmd$, EXEFile$, EndOfExe&, StartOfExe&, StringEXE$, VB5&, VB6FR&, I&
Cmd = Command
MyEXEName = Space(300)
MyEXEName = Left(MyEXEName, GetModuleFileNameA(0, MyEXEName, 300))
MyEXEName = LongPathName(MyEXEName)
If UCase(Right(MyEXEName, 8)) = "\VB6.EXE" Then 'Exécution non compilié (Sous VB6)
MyEXEName = App.Path & "\" & App.EXEName & ".exe"
End If
I = InStrRev(MyEXEName, "\")
'Si le programme se nomme LINK.EXE c'est le patch compilateur
'Sinon c'est l'installateur désinstallateur
If UCase(Mid(MyEXEName, I)) <> "\LINK.EXE" Then PreVerif: Install_Uninstall: Exit Sub
OrgLINK = Left(MyEXEName, I) & "_LINK.EXE"
ShellWait """" & OrgLINK & """ " & Cmd, , True
EndOfExe = InStr(UCase(Cmd), ".EXE""")
If EndOfExe = 0 Then End
StartOfExe = InStrRev(Cmd, """", EndOfExe) + 1
EXEFile = Mid(Cmd, StartOfExe, EndOfExe + 4 - StartOfExe)
If Dir(EXEFile) = "" Then End
Open EXEFile For Binary As 1
StringEXE = Space(LOF(1))
Get 1, , StringEXE
Boucle:
VB5 = InStr(VB5 + 1, StringEXE, "VB5!")
If VB5 Then
VB6FR = VB5 + 6
If Mid(StringEXE, VB6FR, 10) = "VB6FR.DLL" & Chr(0) Then
Put 1, VB6FR, "MSVBVM60.DLL" 'Patch remplace VB6FR.DLL par MSVBVM60.DLL
End
Else
GoTo Boucle
End If
Else
End
End If
End Sub
Private Sub PreVerif() ' destinée aux utilisateurs de Vista
If Dir(LinkFile) = "" Then
LinkFile = "D" & Mid(LinkFile, 2)
If Dir(LinkFile) = "" Then LinkFile = "C:" & Mid(LinkFile, 17)
End If
End Sub
Private Function Verif() As Boolean
If UCase(Right(LinkFile, 9)) = "\LINK.EXE" Then
OrgLINK = Left(LinkFile, Len(LinkFile) - 8) & "_LINK.EXE"
Verif = True
Else
MsgBox "Doit se terminer par ""\LINK.EXE"""
End If
End Function
Private Sub Install_Uninstall()
HelpFile = Left(MyEXEName, Len(MyEXEName) - 3) & "hlp"
If Dir(HelpFile) = "" Then Help.Caption = App.EXEName & ".hlp non trouvé": Help.Enabled = False
If Not Verif Then Exit Sub
If Len(Dir(LinkFile)) Then
Label1.Visible = False
Install.Enabled = (Dir(OrgLINK) = "")
UnInstall.Enabled = Not Install.Enabled
Else
Label1.Visible = True
Install.Enabled = False
UnInstall.Enabled = False
End If
End Sub
'Comme SHELL mais attend la fin de l'execution
Private Function ShellWait&(CommandLine$, Optional Path$ = vbNullString, Optional Hide As Boolean = False)
Dim proc As PROCESS_INFORMATION
Dim Start As STARTUPINFO
With Start
.cb = Len(Start)
If Hide Then
.dwFlags = STARTF_USESHOWWINDOW
.wShowWindow = SW_HIDE
End If
End With
CreateProcessA 0&, CommandLine, 0&, 0&, 1&, NORMAL_PRIORITY_CLASS, 0&, Path, Start, proc
ShellWait = WaitForSingleObject(proc.hProcess, INFINITE)
CloseHandle proc.hProcess
End Function
Private Function LongPathName$(ByVal ShortPath$)
LongPathName$ = Space(1024)
LongPathName$ = Left(LongPathName$, GetLongPathNameA(ShortPath, LongPathName$, 1024))
End Function
Private Sub Help_Click()
Shell "Notepad """ & HelpFile & """", vbNormalFocus
End Sub
Private Sub LinkFile_Keypress(K%)
If K = 13 Then Install_Uninstall ' si <Enter>
End Sub
Private Sub ChLINK_Click()
Install_Uninstall
End Sub
Private Sub Install_Click()
If Not Verif Then Exit Sub
If Dir(MyEXEName) = "" Then MsgBox "Il faut compiler " & App.EXEName: Exit Sub
On Error Resume Next
FileCopy LinkFile, OrgLINK
If Err = 0 Then FileCopy MyEXEName, LinkFile
If Err Then MsgBox "l'Installation a échoué" Else MsgBox "Installé avec scccés"
Install_Uninstall
End Sub
Private Sub UnInstall_Click()
If Not Verif Then Exit Sub
On Error Resume Next
FileCopy OrgLINK, LinkFile
If Err Then
MsgBox "La désinstallation a échouée !"
Else
Kill OrgLINK: Install_Uninstall
End If
End Sub
Conclusion
Avec le projet précedent(UnVb6fr inclus) Je pense avoir fait le tour du sujet je retire les Avertissements que j'avais fait suite à une modif
Historique
- 27 février 2009 01:10:04 :
- Petite amélioration pour les utilisateurs de Vista
- 27 février 2009 18:00:29 :
- Avertissement
- 01 mars 2009 02:49:20 :
- au lieu de remplacer la dépendance à VB6FR.DLL
par une dépendance à MSVBVM60.DLL (dont l'EXE est déja dépendant)
ce qui a supprimé des inconvenient que j'avais mentionné
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Forcer une connexion automatique [ par Jonef ]
Bonjour,voilà je cherche le moyen pour mettre la connexion internet de quelqu'un en "Connexion automatique" c'est à dire que lorsque j'apelle la conne
Mail automatique [ par gty ]
Comment peut-on envoyer le résultat d'une page asp en mail à plusieurs destinataires et cela sans devoir cliquer sur un bouton ou un lien.
fermeture automatique [ par damien ]
je viens de créer ma toute première application visual basicc'est un simple formulaire avec du codeje voudrais qu'il se ferme automatiquement après l'
apres installation du prg execution automatique [ par cfourdin ]
comment lors de l'installation faire pour que l'exe installé se met en route automatiquement.
Comment faire un défilement automatique jusqu'a la derniere ligne ? [ par VBPOUSOPPPA ]
Je fait un Chat Internet (qui marche)Les message arrivants s'affichent les uns à la suite des autres en passant à la ligne dans un control "Richtextbo
URGENT lancement automatique [ par marci ]
salut a tous,j'ai realise une appli et j'aimerais l'integrer a Microsoft Outlook, mais pas comme une macro. En fait j'aimerais qu'elle fonctionne comm
Dimentionnement automatique d'un champs RTF [ par Marc COTTÉ ]
Pourriez vous me dire comment faire pour dimentionner dynamiquement un champs RTF dont le contenu provient de la sélection d'une partie d'un autre cha
|
Derniers Blogs
[SHAREPOINT] NOUVELLE PRéSENTATION POUR LA DOCUMENTATION SHAREPOINT SUR TECHNET.[SHAREPOINT] NOUVELLE PRéSENTATION POUR LA DOCUMENTATION SHAREPOINT SUR TECHNET. par Patrick Guimonet
Vous l'avez peut-être déjà remarqué ? La documentation SharePoint a subit un cure de "relooking" et prend un style inspiré de Metro, donc plus sobre, plus pur, plus clair ! C'est sur fond blanc et ca ressemble à ça : Globaleme...
Cliquez pour lire la suite de l'article par Patrick Guimonet ASYNC/AWAIT: COMPRENDRE COMMENT CA MARCHEASYNC/AWAIT: COMPRENDRE COMMENT CA MARCHE par fathi
Tout le monde est unanime pour dire que la programmation multi-thread et asynchrone est en train de devenir un sujet incontournable. Beaucoup de choses sont arrivées avec le framework 4 pour le code parallèle (TPL, PLinq,.) et bientôt, on va avoir l...
Cliquez pour lire la suite de l'article par fathi PAS D'INTELLITRACE SUR MON SITE WEB DANS IIS !PAS D'INTELLITRACE SUR MON SITE WEB DANS IIS ! par Etienne Margraff
J'ai récemment eu un problème pour obtenir l'intelliTrace sur un site web dans IIS. Il n'y avait pas de message d'erreur, rien dans le journal d'évènement Windows, et après 3 appels à une voyante, 2 visites chez un marabou, j'ai failli me résign...
Cliquez pour lire la suite de l'article par Etienne Margraff OFFICE 365 - SHAREPOINT ONLINE, QUELQUES LIMITATIONSOFFICE 365 - SHAREPOINT ONLINE, QUELQUES LIMITATIONS par junarnoalg
De nombreuses entreprises font le choix de SharePoint Online, service fourni au travers de l'offre de Microsoft Office 365. S'il est vrai que ce choix apporte un grand nombre d'avantages; rapidité de mise en œuvre, disponibilité, large couvertu...
Cliquez pour lire la suite de l'article par junarnoalg PRéSENTATION DES API REST DE WINDOWS AZURE : LISTER LES COMPTES DE STORAGEPRéSENTATION DES API REST DE WINDOWS AZURE : LISTER LES COMPTES DE STORAGE par richardc
http://www.c2idotnet.com/articles/presentation-des-api-rest-de-windows-azure-lister-les-comptes-de-storage
Désolé pour "toto", mais c2i existait avant blogs.developpeur.org et c'est mon site "officiel" ;-) ...
Cliquez pour lire la suite de l'article par richardc
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|