Question Wait-Process interminable
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
C'est ce que j'ai fait. D'où ma proposition de solution ou de test.si tu regardes bien mon script
maar écrit:
Oui, mais ton erreur, je l'ai aussi commise, est peut être portée par le nom de la fonction ReleaseComObject.je fais bien une release de l'objet com
La signature de cette fonction :
[code:1]function Close_excel_object ($excel_object, $excel_workbook)
[/code:1]
Contient deux paramètres, un objet COM et un truc , $excel_workbook.
Tu considères que ton code libère un objet COM, non il décrémente un compteur de référence.
Si tu passe deux trucs, c'est à dire deux références provenant d'un seul Object COM, ton code doit comporter deux appels à ReleaseComObject.
Lorsque tu modifies un Workbook tu ne modifies pas l'application Excel, mais une 'entité' qu'elle contient.
La terminologie à ici son importance, quand parler d'objet ou d'interface dans un langage dynamique qui veut simplifier les choses au maximum ?
Avec COM, il y a effectivement un seul objet, en quelque sorte un point d'entrée vers une table d'interfaces, mais dotnet masque la compléxité de la techno COM.
En lisant sa documentation , on y trouve ces informations :
Je te l'accorde le texte est un peu confus, enfin il manque plutot des explications détaillés.En même temps si tu utilises un objet COM, le rédacteur de cette doc peut se dire que le lecteur connait le sujet qu'il manipule. C'est une documentation pas un cours...Cette méthode est utilisée pour contrôler explicitement la durée de vie d'un objet COM employé à partir d'un code managé. Utilisez cette méthode pour libérer en temps voulu l'objet COM sous-jacent qui contient des références à des ressources ou lorsque des objets doivent être libérés dans un ordre spécifique.
Le décompte de références de ce wrapper pouvant être appelé par le runtime est incrémenté chaque fois qu'un pointeur d'interface COM lui est mappé.
A partir d'un objet COM on peut obtenir plusieurs interfaces. Chaque usage d'interface incrémente le compteur de référence. La libération de l'objet COM, qui le père de tous tes problèmes
maar écrit:
Je ne pense pas que ce soit vraiment le cas, ou alors il y a un comportement de Powershell que je ne connaissais pas, dans ce cas ton pb m'aura appris qq chose.Dans cet article on voit bien comment se débarasser du process (ou plus précisement, de l'objet COM).
Et normalement, en procédant comme ils le disent, une fois que powershell à executer l'instruction de release COM, l'instance disparait du gestionnaire des tâche et il n'y a plus de handle donc je peux refaire une nouvelle instance.
On apprend énormément de choses en aidant les autres
Tu remarqueras que dans le code de l'article que tu cites il n'est créé qu'une seule référence, d'ou un seul appel à ReleaseComObject.
Pour en revenir à ton pb essaie déjà de libérer explicitement TOUTES les références avant de terminer ton traitement.
Si cela ne régle pas ton pb, il sera temps d'aller regarder ailleurs.<br><br>Message édité par: Laurent Dardenne, à: 8/01/12 15:20
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
Qu'en est-il de ton pb ?Si cela ne régle pas ton pb, il sera temps d'aller regarder ailleurs.
As-tu avancé ? Reculé ? ...
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les initiés
- Wait-Process interminable