Metoden OpenSharedItem för Outlook innehåller ett filhandtag i signerade MSG-filer

Ursprungligt KB-nummer:   2633737

Symptom

Metoden i objektmodellen för Microsoft Outlook släpper inte filhandtaget för en .msg-fil förrän Outlook får viss OpenSharedItem inaktiv tid.

Orsak

Detta inträffar om .msg-filen är signerad eller krypterad (SMIME-baserade meddelanden). Det är en begränsning av hur Outlook internt hanterar bearbetningen och filhandtagen för SMIME-baserade .msg-filer. Outlook gör en bakgrundsverifiering av signaturen i meddelandet och släpper filhandtaget på .msg-filen när Outlook får en viss inaktiv tid. .msg-filen kan bara tas bort när Outlook har slutfört all bearbetning som krävs och har släppt filhandtaget.

Du kan fördröja försöket att ta bort filen, även om det inte finns något direkt sätt att avgöra när Outlook kommer att låsa upp filen.

Lösning

Det finns inga planer på att ändra den här funktionen.

Mer information

I Office Outlook 2007 och Outlook 2010 kan du öppna OpenSharedItem avtalade tider i ICalendar-filer (.ics), vCard-filer (.vcf) och Outlook-meddelandefiler (.msg). Vilken typ av objekt som returneras av den här metoden beror på vilken typ av delat objekt som öppnas.

I outlook-exemplet för Microsoft Visual Basic for Applications (VBA) öppnar koden en SignMessage.msg-fil med hjälp av OpenSharedItem metoden. Koden försöker sedan ta bort MSG-filen när e-postobjektet stängs. Om .msg-filen är signerad eller krypterad orsakar koden ett fel om nekad behörighet. Men om en osignerad eller okrypterad .msg-fil öppnas tar koden bort .msg-filen som förväntat.

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