Outlookin OpenSharedItem-menetelmä sisältää allekirjoitettujen .msg tiedostojen tiedostokahvan

Alkuperäinen KT-numero: 2633737

Oireet

OpenSharedItem Microsoft Outlookin objektimallin menetelmä ei vapauta .msg tiedoston tiedostokahvaa, ennen kuin Outlook on käyttämättömänä.

Syy

Tämä ongelma ilmenee, jos .msg tiedosto on allekirjoitettu tai salattu (SMIME-pohjaiset viestit). Se on rajoitus sille, miten Outlook hallitsee sisäisesti SMIME-pohjaisten .msg tiedostojen käsittelyä ja tiedostokahvoja. Outlook tarkistaa viestin allekirjoituksen taustalla ja vapauttaa tiedostokahvan .msg tiedostoon, kun Outlookin käyttämättömyysaika on jonkin aikaa. .msg tiedosto voidaan poistaa vain, kun Outlook on lopettanut kaiken tarvittavan käsittelyn ja vapauttanut tiedostokahvan.

Voit viivyttää tiedoston poistoyritystä, vaikka ei ole suoraa tapaa määrittää, milloin Outlook vapauttaa tiedoston lukituksen.

Ratkaisu

Tätä toimintaa ei ole tarkoitus muuttaa.

Lisätietoja

Office Outlook 2007:ssä ja Outlook 2010:ssä on OpenSharedItem menetelmä iCalendar (.ics) -tapaamistiedostojen, .vcf- ja Outlook-viestitiedostojen (.msg) avaamiseen. Tämän menetelmän palauttaman objektin tyyppi määräytyy avatun jaetun kohteen lajin mukaan.

Seuraavassa Microsoft Visual Basic for Applications (VBA) Outlook -esimerkissä koodi avaa SignedMessage.msg -tiedoston -menetelmän OpenSharedItem avulla. Koodi yrittää sitten poistaa .msg-tiedoston sen jälkeen, kun se on sulkenut sähköpostikohteen. Jos .msg tiedosto on allekirjoitettu tai salattu, koodi aiheuttaa käyttö estetty -virheen. Jos allekirjoittamaton tai salaamaton .msg tiedosto kuitenkin avataan, koodi poistaa .msg tiedoston odotetulla tavalla.

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