OVH Cloud OVH Cloud

ligne de commande et màj microsoft

1 réponse
Avatar
scraper
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 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

scraper

1 réponse

Avatar
François Picalausa
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é:

'Déclarations
Private Const NORMAL_PRIORITY_CLASS = &H20
Private Const INFINITE = &HFFFF ' Infinite timeout

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)

'Attendre, attendre...
lngResult = WaitForSingleObject(proc.hProcess, INFINITE)

'Récupérer l'erreur éventuelle
Call GetExitCodeProcess(proc.hProcess, lngResult)

'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>