2009-01-28 7 views
1

Je travaille sur une application win qui accède aux dossiers personnels Outlook. En interne, il monte le dossier personnel sur l'instance Outlook et traite les mails, puis démonte le pst. Après avoir démonté le pst, je supprime ce fichier. Maintenant, le problème est que même après le montage de la mémoire pst et libérant, quand j'essaye de supprimer le pst, je reçois une exception que certains processus utilisent ce fichier afin qu'il ne peut pas être supprimé. Et ce processus est une perspective. J'utilise le code ci-dessous pour un montage et libérer de la mémoire:Problème lors de la libération de la mémoire à partir d'un fichier Outlook pst

_application.Session.RemoveStore(_personalFolder); 
while (System.Runtime.InteropServices.Marshal.ReleaseComObject(_personalFolder) >= 0) ; 
_personalFolder = null; 

Je l'ai vérifié plusieurs fois et il semble que cela prend un certain temps pour libérer de la mémoire et il n'y a pas de temps défini pour cela. Quelqu'un pourrait m'aider à supprimer le fichier?

Répondre

1

Jetez un oeil à KB234228 ("OL97: Outlook .pst File Lock Release Interval Now Configurable"). Il s'agit d'Outlook 97, mais je suppose que cela fonctionne toujours.

Je suppose que FileSystemWatcher ne va pas vous aider, car il n'y a pas d'événement "lock exclusif libéré".

Alors peut-être que vous pouvez faire un thread de travail, qui essaie continuellement de supprimer tous les fichiers .pst que vous mettez dans une file d'attente. De cette façon, l'interface utilisateur de votre application peut au moins continuer sans interruption.

Des outils comme ProcMon ont la possibilité de regarder les descripteurs de fichiers des applications. Peut-être que vous êtes capable de faire un appel API qui vous permet de faire cela pour le processus Oulook (c'est un bon matériel pour une autre question SO, je suppose). De cette façon, vous n'avez pas à interroger le système de fichiers et vous pouvez agir plus rapidement lorsque le verrou est parti.

Si vous l'osez, vous pouvez même essayer de fermer immédiatement la poignée de fichier en question, ce qui évite d'avoir à interroger/attendre complètement.

Questions connexes