cs_ROLANDG
Messages postés21Date d'inscriptionvendredi 4 février 2005StatutMembreDernière intervention 3 octobre 2006
-
30 sept. 2006 à 17:27
cs_ROLANDG
Messages postés21Date d'inscriptionvendredi 4 février 2005StatutMembreDernière intervention 3 octobre 2006
-
3 oct. 2006 à 22:57
Bonjour à tous,
Petit problème simple, sur lequel je me casse les dents :
J'appelle MSWord depuis MSEXCEL (en VBA). Donc :
Dim MonObjet As Word.Application 'fonctionne aussi avec "As Object"
Set MonObjet = CreateObject("Word.Application") 'Crée effectivement le processus
'... 'ce que j'ai à faire sous msword
MonObjet.Quit 'pas d'effets apparents
Set MonObjet = Nothing 'devrait tuer le processus
Quand je dis "devrait", c'est qu'en pratique mon processus WINWORD.EXE
est toujours présent dans la liste du gestionnaire des tâches de
windows (xp pro), onglet processus.
A 18Mo le bout, je vous raconte pas le résultat d'un appel dans une boucle ...
Comment faire pour effectivement flinguer le processus ?????
cs_JMO
Messages postés1854Date d'inscriptionjeudi 23 mai 2002StatutMembreDernière intervention24 juin 201827 1 oct. 2006 à 10:34
Bonjour ,
Il faut le "Word.Quit".
jean-marc
Dim Fso : Set Fso = CreateObject("Scripting.FileSystemObject")
Dim Word : Set Word = CreateObject("Word.Application")
Dim MyFile : MyFile = "d:\Jean-Marc Formation Unix - Linux.doc"
Dim File : Set File = Fso.GetFile(MyFile)
'Vérification dans Gestionnaire des tâches
'le process WINWORD.exe est actif
WScript.Sleep(50000)
Word.Quit
Set File = Nothing
Set Word = Nothing
Set Fso = Nothing
MsgBox "Script terminé"
'Vérification dans Gestionnaire des tâches
'le process WINWORD.exe n'existe plus
cs_ROLANDG
Messages postés21Date d'inscriptionvendredi 4 février 2005StatutMembreDernière intervention 3 octobre 2006 1 oct. 2006 à 10:00
Bonjour Jean-Marc,
Merci pour ta réponse mais j'ai du mal a saisir ce que tu me dis.
Effectivement, j'ai au début :
Set MonObjet = createobject("word.application")
(une seule et unique fois) qui crée le processus et, à la fin,
Set MonObjet = Nothing
qui DEVRAIT tuer le processus, mais ce n'est pas le cas . Qu'ais-je oublié ?
Roland
loup maigre, pas chien gras.
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_ROLANDG
Messages postés21Date d'inscriptionvendredi 4 février 2005StatutMembreDernière intervention 3 octobre 2006 1 oct. 2006 à 20:46
Bonsoir Jean-Marc,
Hier, cela ne fonctionnait pas,
Aujourd'hui cela (semble) fonctionne.
C'est sans doute l'effet "gourou du vb".
Merci pour ta réponse, bien que je n'ais pas tout compris (dans les symptomes et les effets).
Bonne continuation à toi.
PS dans la pratique, les symptomes de non fonctionnement (cad non disparition du processus) ont eux-même disparu quand j'ai décoché dans les option de msword, onglet enregistrement, "confirmer l'enregistrement de normal.dot", qui me gonflait depuis un moment (je lance MSWORD, je ferme MSWord, il me demande si j'accepte d'enrfegistrer les modif dans normal.dot (lesquels ???).) anti spyware (AD-WARE SE à jour) anti virus NAV à jour, Qui modifie mon normaldotdot ???) de guerre lasse, j'ai décoché et, miracolo, mes blèmes ont disparu. Merci, Bill ...
cs_JMO
Messages postés1854Date d'inscriptionjeudi 23 mai 2002StatutMembreDernière intervention24 juin 201827 3 oct. 2006 à 19:41
Bonsoir,
Si un script est arrêté en cours d'exécution, les objets restent instanciés et le (ou les)
processus actif(s).
Idem si l'on oublie un "Set xxx = Nothing", "xxxx.Close", "xxxx.Quit".
La libération des processus ne s'effectuera que par un kill de ceux-ci ou un reboot du server.
Lors de mes tests, prévoyant de nombreux ratés, je passe le code ci-dessous:
'Arrêt d'un Process
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\" _
& strComputer & "\root\cimv2")
Set colProcessList = objWMIService.ExecQuery _
("Select * from Win32_Process Where Name = 'EXCEL.exe'")
For Each objProcess in colProcessList
MsgBox objProcess.Name &vbCrLf& " id:" & objProcess.ProcessID
objProcess.Terminate()
Next
Set objWMIService = Nothing
Set colProcessList = Nothing