OpenSharedItem-metoden for Outlook inneholder et filhåndtak på signerte MSG-filer

Opprinnelig KB-nummer:   2633737

Symptomer

Metoden i objektmodellen for Microsoft Outlook frigir ikke filhåndtaket for en MSG-fil før Outlook får OpenSharedItem litt inaktiv tid.

Årsak

Dette skjer hvis MSG-filen er signert eller kryptert (SMIME-baserte meldinger). Det er en begrensning av hvordan Outlook administrerer behandling og filbehandling av SMIME-baserte MSG-filer internt. Outlook gjør en bakgrunnskontroll av signaturen i meldingen og frigir filhåndtaket til MSG-filen når Outlook får litt inaktiv tid. MSG-filen kan bare slettes når Outlook har fullført all nødvendig behandling og har utgitt filhåndtaket.

Du kan forsinke forsøket på å slette filen, selv om det ikke er noen direkte måte å fastslå når Outlook slipper fillåsen.

Løsning

Det er ingen planer om å endre denne virkemåten.

Mer informasjon

Office Outlook 2007 og Outlook 2010 gir deg metoden for å åpne OpenSharedItem iCalendar-avtalefiler (.ics), vCard-filer (.vcf) og Outlook-meldingsfiler (MSG). Objekttypen som returneres av denne metoden, avhenger av hvilken type delt element som åpnes.

I microsoft Visual Basic for Applications (VBA) Outlook-eksemplet nedenfor åpner koden en SignedMessage.msg-fil ved hjelp av OpenSharedItem metoden. Koden prøver deretter å slette MSG-filen etter at e-postelementet lukkes. Hvis MSG-filen er signert eller kryptert, fører koden til en feilmelding om at tillatelsen ikke er tilgjengelig. Hvis en usignert eller ukryptert MSG-fil åpnes, sletter imidlertid koden MSG-filen som forventet.

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