La méthode OpenSharedItem pour Outlook contient un handle de fichier sur les fichiers .msg signés

Numéro de la ko d’origine :   2633737

Symptômes

La méthode dans le modèle objet pour Microsoft Outlook ne libère pas le handle de fichier d’un fichier .msg tant qu’Outlook n’a pas obtenu OpenSharedItem de temps d’inactivité.

Cause

Ce comportement se produit si le fichier .msg est signé ou chiffré (messages SMIME). Il s’agit d’une limitation de la façon dont Outlook gère en interne le traitement et les de gestions de fichiers de fichiers .msg basés sur SMIME. Outlook fait une vérification en arrière-plan de la signature sur le message et libère le handle de fichier dans le fichier .msg lorsqu’Outlook obtient un temps d’inactivité. Le fichier .msg ne peut être supprimé que lorsqu’Outlook a terminé tout le traitement requis et a libéré le handle de fichier.

Vous pouvez retarder la tentative de suppression du fichier, bien qu’il n’existe aucun moyen direct de déterminer quand Outlook va libérer le verrou du fichier.

Résolution

Il n’est pas prévu de modifier ce comportement.

Plus d’informations

Office Outlook 2007 et Outlook 2010 fournissent la méthode pour ouvrir les fichiers de rendez-vous OpenSharedItem iCalendar (.ics), les fichiers vCard (.vcf) et les fichiers de message Outlook (.msg). Le type d’objet renvoyé par cette méthode dépend du type d’élément partagé ouvert.

Dans l’exemple Microsoft Visual Basic pour Applications (VBA) Outlook suivant, le code ouvre un fichier SignedMessage.msg à l’aide de la OpenSharedItem méthode. Le code tente ensuite de supprimer le fichier .msg après avoir fermé l’élément de courrier. Si le fichier .msg est signé ou chiffré, le code provoque une erreur d’autorisation refusée. Toutefois, si un fichier .msg non signé ou non chiffré est ouvert, le code supprime le fichier .msg comme prévu.

Public Sub TestOpenSharedItem()
    Dim oNamespace As Outlook.NameSpace
    Dim oSharedItem As Outlook.MailItem
    Dim oFolder As Outlook.Folder
    On Error GoTo ErrRoutine

    ' Get a reference to a NameSpace object.
    Set oNamespace = Application.GetNamespace("MAPI")'Open the Signed Message (.msg) file containing the shared item.
    Set oSharedItem = oNamespace.OpenSharedItem("C:\Temp\SignedMessage.msg")'Open the Regular Message (.msg) file containing the shared item.
    'Set oSharedItem = oNamespace.OpenSharedItem("C:\Temp\RegularMessage.msg")

    oSharedItem.Close (olDiscard)
    Set oSharedItem = Nothing

    'Add a reference to Microsoft Scripting Runtime
    Dim oFSO As New FileSystemObject

    ' Try to delete the Signed Message
    oFSO.DeleteFile ("C:\Temp\SignedMessage.msg")'Try to delete the Regular Message
    'oFSO.DeleteFile ("C:\Temp\RegularMessage.msg")

EndRoutine:
    On Error GoTo 0
    Set oSharedItem = Nothing
    Set oFSO = Nothing
    Set oNamespace = Nothing
Exit Sub
ErrRoutine:
Select Case Err.Number
    Case -2147024894 ' &H80070002
        ' Occurs if the specified file or URL could not
        ' be found, or the file or URL cannot be
        ' processed by the OpenSharedItem method.
        MsgBox Err.Description, _
        vbOKOnly, _
        Err.Number & " - " & Err.Source
    Case Else
        ' Any other error that may occur.
        MsgBox Err.Description, _
        vbOKOnly, _
        Err.Number & " - " & Err.Source
End Select
GoTo EndRoutine
End Sub