il s'agit de lancer manuellement une mise à jour Micrososft .... en l'occurence, la Q329414.exe ....
si on décompresse seulement les fichiers dans un rep' temp, avec la commande Q329414.exe /Q /C /T:C:\windows\temp\Toto , on
accède à tous les fichiers contenus dans cette mise à jour (merci François ;-)
ensuite, depuis ce rep' Toto, si je double clique sur le fichier dahotfix.exe , il se lance sans problème!
si je le lance depuis démarrer/exécuter (démarrer/exécuter: C:\windows\temp\Toto\dahotfix.exe) , pas de souci !
dans les 2 cas, la mise à jour est réalisée avec succès
si j'essaie de le lancer depuis VB 6, plantage, (message d'erreur lors de la copie des fichiers ....)
ce que j'ai fait :
-------------
Private Function Test (CmdLine)
Dim retval As Long, Ret As Long
Dim proc As PROCESS_INFORMATION
Dim start As STARTUPINFO
Dim SpecFolder As String
'Initialise la structure STARTUPINFO
start.cb = Len(start)
retval = CreateProcessA(vbNullString, CmdLine, 0&, 0&, 1&, NORMAL_PRIORITY_CLASS, 0&, vbNullString, start, proc)
Ret& = WaitForSingleObject(proc.hProcess, INFINITE)
Call GetExitCodeProcess(proc.hProcess, Ret&)
Call CloseHandle(proc.hThread)
Call CloseHandle(proc.hProcess)
End Function
... et dans mon code ...
Test "C:\windows\temp\Toto\dahotfix.exe"
----------
l'erreur intervient lors de l'appel de la fonction Test
je vois vraiment pas ce qui peut se produire ??
sans doute un paramètre mal passé dans la ligne de commande, mais je vois pas trop, là ....
??
merci d'avance ... :-)
--
Attention ! Adresse mail invalide ...
Pour me contacter, cliquez sur le lien ci-dessous:
http://scraper.chez.tiscali.fr/contact.htm
Private Type PROCESS_INFORMATION hProcess As Long hThread As Long dwProcessId As Long dwThreadId As Long End Type Private Type STARTUPINFO cb As Long lpReserved As String lpDesktop As String lpTitle As String 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 Declare Function CloseHandle _ Lib "kernel32" _ ( _ ByVal hObject As Long _ ) _ As Long Private Declare Function GetExitCodeProcess _ Lib "kernel32" _ ( _ ByVal hProcess As Long, _ lpExitCode As Long _ ) _ As Long Private Declare Function WaitForSingleObject _ Lib "kernel32" _ ( _ ByVal hHandle As Long, _ ByVal dwMilliseconds As Long _ ) _ As Long Private Declare Function CreateProcess _ Lib "kernel32" _ Alias "CreateProcessA" _ ( _ ByVal lpApplicationName As String, _ ByVal lpCommandLine As String, _ lpProcessAttributes As Any, _ lpThreadAttributes As Any, _ ByVal bInheritHandles As Long, _ ByVal dwCreationFlags As Long, _ lpEnvironment As Any, _ ByVal lpCurrentDriectory As String, _ lpStartupInfo As STARTUPINFO, _ lpProcessInformation As PROCESS_INFORMATION _ ) _ As Long 'Plus rien à déclarer...
Private Sub Command1_Click() Dim lngResult As Long 'On exécute et on attend lngResult = ExecuteAndWait("...dahotfix.exe") If lngResult Then 'Si une erreur s'est produite MsgBox "Erreur lors de l'exécution" Else MsgBox "Patch appliqué avec succès" End If End Sub
Private Function ExecuteAndWait(CmdLine As String) As Long Dim lngResult As Long Dim proc As PROCESS_INFORMATION Dim start As STARTUPINFO
'Initialise la structure STARTUPINFO start.cb = Len(start) 'Création du process lngResult = CreateProcess(vbNullString, _ CmdLine, ByVal 0&, ByVal 0&, 1&, _ NORMAL_PRIORITY_CLASS, 0&, _ vbNullString, start, proc)
'Fermer les handles une fois le process fini Call CloseHandle(proc.hThread) Call CloseHandle(proc.hProcess)
'Retourner le code d'erreur ExecuteAndWait = lngResult End Function
-- François Picalausa (MVP VB) http://faq.vb.free.fr --- http://msdn.microsoft.com Le nombre de pages d'un cours de math avant un examen tends vers l'infini.
"scraper" a écrit dans le message de news:
bonjour à tous !
j'ai un petit souçi ... :-)
il s'agit de lancer manuellement une mise à jour Micrososft .... en l'occurence, la Q329414.exe ....
si je double clique sur le fichier dahotfix.exe , il se lance sans problème! la mise à jour est réalisée avec succès
si j'essaie de le lancer depuis VB 6, plantage, (message d'erreur lors de la copie des fichiers ....)
ce que j'ai fait :
<snip>
Hello,
J'ai apporté quelques petites corrections au code pour correspondre à mes
déclarations et je ne constate aucun problème :-)
Voici le code modifié:
Private Type PROCESS_INFORMATION
hProcess As Long
hThread As Long
dwProcessId As Long
dwThreadId As Long
End Type
Private Type STARTUPINFO
cb As Long
lpReserved As String
lpDesktop As String
lpTitle As String
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 Declare Function CloseHandle _
Lib "kernel32" _
( _
ByVal hObject As Long _
) _
As Long
Private Declare Function GetExitCodeProcess _
Lib "kernel32" _
( _
ByVal hProcess As Long, _
lpExitCode As Long _
) _
As Long
Private Declare Function WaitForSingleObject _
Lib "kernel32" _
( _
ByVal hHandle As Long, _
ByVal dwMilliseconds As Long _
) _
As Long
Private Declare Function CreateProcess _
Lib "kernel32" _
Alias "CreateProcessA" _
( _
ByVal lpApplicationName As String, _
ByVal lpCommandLine As String, _
lpProcessAttributes As Any, _
lpThreadAttributes As Any, _
ByVal bInheritHandles As Long, _
ByVal dwCreationFlags As Long, _
lpEnvironment As Any, _
ByVal lpCurrentDriectory As String, _
lpStartupInfo As STARTUPINFO, _
lpProcessInformation As PROCESS_INFORMATION _
) _
As Long
'Plus rien à déclarer...
Private Sub Command1_Click()
Dim lngResult As Long
'On exécute et on attend
lngResult = ExecuteAndWait("...dahotfix.exe")
If lngResult Then 'Si une erreur s'est produite
MsgBox "Erreur lors de l'exécution"
Else
MsgBox "Patch appliqué avec succès"
End If
End Sub
Private Function ExecuteAndWait(CmdLine As String) As Long
Dim lngResult As Long
Dim proc As PROCESS_INFORMATION
Dim start As STARTUPINFO
'Initialise la structure STARTUPINFO
start.cb = Len(start)
'Création du process
lngResult = CreateProcess(vbNullString, _
CmdLine, ByVal 0&, ByVal 0&, 1&, _
NORMAL_PRIORITY_CLASS, 0&, _
vbNullString, start, proc)
'Fermer les handles une fois le process fini
Call CloseHandle(proc.hThread)
Call CloseHandle(proc.hProcess)
'Retourner le code d'erreur
ExecuteAndWait = lngResult
End Function
--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
Le nombre de pages d'un cours de math avant un examen tends vers
l'infini.
"scraper" <scraperpasdespam@tiscali.fr> a écrit dans le message de
news:OlwHXRuSEHA.2128@TK2MSFTNGP11.phx.gbl
bonjour à tous !
j'ai un petit souçi ... :-)
il s'agit de lancer manuellement une mise à jour Micrososft .... en
l'occurence, la Q329414.exe ....
si je double clique sur le fichier
dahotfix.exe , il se lance sans problème!
la mise à jour est réalisée avec succès
si j'essaie de le lancer depuis VB 6, plantage, (message d'erreur
lors de la copie des fichiers ....)
Private Type PROCESS_INFORMATION hProcess As Long hThread As Long dwProcessId As Long dwThreadId As Long End Type Private Type STARTUPINFO cb As Long lpReserved As String lpDesktop As String lpTitle As String 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 Declare Function CloseHandle _ Lib "kernel32" _ ( _ ByVal hObject As Long _ ) _ As Long Private Declare Function GetExitCodeProcess _ Lib "kernel32" _ ( _ ByVal hProcess As Long, _ lpExitCode As Long _ ) _ As Long Private Declare Function WaitForSingleObject _ Lib "kernel32" _ ( _ ByVal hHandle As Long, _ ByVal dwMilliseconds As Long _ ) _ As Long Private Declare Function CreateProcess _ Lib "kernel32" _ Alias "CreateProcessA" _ ( _ ByVal lpApplicationName As String, _ ByVal lpCommandLine As String, _ lpProcessAttributes As Any, _ lpThreadAttributes As Any, _ ByVal bInheritHandles As Long, _ ByVal dwCreationFlags As Long, _ lpEnvironment As Any, _ ByVal lpCurrentDriectory As String, _ lpStartupInfo As STARTUPINFO, _ lpProcessInformation As PROCESS_INFORMATION _ ) _ As Long 'Plus rien à déclarer...
Private Sub Command1_Click() Dim lngResult As Long 'On exécute et on attend lngResult = ExecuteAndWait("...dahotfix.exe") If lngResult Then 'Si une erreur s'est produite MsgBox "Erreur lors de l'exécution" Else MsgBox "Patch appliqué avec succès" End If End Sub
Private Function ExecuteAndWait(CmdLine As String) As Long Dim lngResult As Long Dim proc As PROCESS_INFORMATION Dim start As STARTUPINFO
'Initialise la structure STARTUPINFO start.cb = Len(start) 'Création du process lngResult = CreateProcess(vbNullString, _ CmdLine, ByVal 0&, ByVal 0&, 1&, _ NORMAL_PRIORITY_CLASS, 0&, _ vbNullString, start, proc)
'Fermer les handles une fois le process fini Call CloseHandle(proc.hThread) Call CloseHandle(proc.hProcess)
'Retourner le code d'erreur ExecuteAndWait = lngResult End Function
-- François Picalausa (MVP VB) http://faq.vb.free.fr --- http://msdn.microsoft.com Le nombre de pages d'un cours de math avant un examen tends vers l'infini.
"scraper" a écrit dans le message de news:
bonjour à tous !
j'ai un petit souçi ... :-)
il s'agit de lancer manuellement une mise à jour Micrososft .... en l'occurence, la Q329414.exe ....
si je double clique sur le fichier dahotfix.exe , il se lance sans problème! la mise à jour est réalisée avec succès
si j'essaie de le lancer depuis VB 6, plantage, (message d'erreur lors de la copie des fichiers ....)