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

Numéro de la base de connaissances d’origine : 2633737

Symptômes

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

Cause

Ce comportement se produit si le fichier .msg est signé ou chiffré (messages basés sur SMIME). Il s’agit d’une limitation de la façon dont Outlook gère en interne le traitement et les descripteurs de fichiers de .msg basés sur SMIME. Outlook effectue une vérification en arrière-plan de la signature sur le message et libère le descripteur de fichier dans le fichier .msg lorsque Outlook obtient un certain temps d’inactivité. Le fichier .msg ne peut être supprimé qu’une fois qu’Outlook a terminé tous les traitements requis et 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 libérera le verrou de fichier.

Résolution

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

Informations supplémentaires

Office Outlook 2007 et Outlook 2010 fournissent la OpenSharedItem méthode permettant d’ouvrir des fichiers de rendez-vous iCalendar (.ics), des fichiers vCard (.vcf) et des fichiers de messages Outlook (.msg). Le type d’objet retourné par cette méthode dépend du type d’élément partagé qui est ouvert.

Dans l’exemple Outlook Microsoft Visual Basic pour Applications (VBA) qui suit, 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 Autorisation refusée . Toutefois, si un fichier de .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