J'ai un agent LotusScript planifié qui s'exécute sur un client (édition Social 9.0). L'un de ses objectifs est d'ouvrir un document Word et de l'enregistrer en tant que PDF, mais ce n'est pas vraiment important. Voici le code correspondant extraitObjet Word.Application (Office 2016) Méthode .quit() suspendue dans LS
Declarations
Dim wrdApp as Variant
Sub Initialize
[Getting the usual Notes Session, Database, View values]
Set wrdApp = createObject("Word.Application")
wrdApp.visible = True
starthere:
'we check to see if there is anything that has been deferred
Set v = db.GetView("RIT")
strStatus = "Success"
Set doc = v.Getfirstdocument()
If (doc Is Nothing) Then Exit Sub
[Snip]
End Sub
Sub Terminate
wrdApp.visible = True
Dim quitCode As Variant
quitCode = 0
Call wrdApp.quit(quitCode)
Print "Quit called, waiting 3 seconds"
' Wait a couple seconds
Sleep(3)
Print "Done waiting, setting wrdApp to Nothing"
Set wrdApp=Nothing
Print "Exiting agent"
End Sub
Le problème que je vais avoir est que depuis que nous avons mis à niveau vers Office 2016, parfois l'agent ne sera jamais fin. Dans le journal, je vois "Terminé en attente, définition de wrdApp sur Nothing" mais pas "Agent en cours de sortie". Je vais finir avec une fenêtre Word ouverte (mais pas de documents bien sûr) et quand je regarde dans le Gestionnaire des tâches, je vois un WINWORD.EXE fonctionnant avec 0% CPU et 2 ou 3 secondes de temps CPU. Et bien sûr, juste pour ajouter à l'intrigue, cela n'arrive pas à chaque fois non plus. Et puisque l'agent ne se termine jamais, tous les autres agents programmés sont bloqués jusqu'à ce que je tue l'instance de zombie Word. J'ai essayé toutes les suggestions que je peux trouver (vous remarquerez que je rends Word visible et j'utilise un Variant comme paramètre pour Quitter, et j'ai même jeté le sommeil (3) hors de la séparation), mais aucun n'a fait de différence . Nous n'avons jamais eu ce problème avec Office 2010 (même lorsque le code de l'agent était très louche.) En outre, le problème peut se produire que j'ouvre ou non un document Word. Y a-t-il une solution? Ou revient à O2010 la seule option?
Juste un test: pourriez-vous mettre tout votre code dans le Initialize Sub? J'ai eu de mauvaises expériences avec un Terminate Sub qui a été terminé avant la fin du code ... –
C'est un code que j'ai refactorisé un peu. Il était utilisé pour configurer et décomposer l'instance de Word dans un sous-programme appelé Initialize. Je l'ai réécrit de cette façon quand j'ai commencé à avoir le problème (ce qui signifie que ce n'est pas lié à Terminate.) Bien que le refactoring n'a pas aidé (ou blessé) le problème, j'aime comment ça circule mieux. – Duston