Metoda OpenSharedItem dla programu Outlook przechowuje dojście do pliku w podpisanych plikach .msg

Oryginalny numer KB: 2633737

Symptomy

Metoda OpenSharedItem w modelu obiektów programu Microsoft Outlook nie zwalnia dojścia do pliku .msg, dopóki program Outlook nie uzyska czasu bezczynności.

Przyczyna

Takie zachowanie występuje, jeśli plik .msg jest podpisany lub zaszyfrowany (komunikaty oparte na protokole SMIME). Jest to ograniczenie sposobu, w jaki program Outlook wewnętrznie zarządza przetwarzaniem i obsługą plików plików .msg opartych na protokole SMIME. Program Outlook przeprowadza weryfikację podpisu w tle w komunikacie i zwalnia dojście do pliku .msg, gdy program Outlook uzyska pewien czas bezczynności. Plik .msg można usunąć tylko wtedy, gdy program Outlook zakończy wszystkie wymagane przetwarzanie i zwolni dojście do pliku.

Możesz opóźnić próbę usunięcia pliku, chociaż nie ma bezpośredniego sposobu określenia, kiedy program Outlook zwolni blokadę pliku.

Rozwiązanie

Nie ma planów zmiany tego zachowania.

Więcej informacji

Programy Office Outlook 2007 i Outlook 2010 udostępniają OpenSharedItem metodę otwierania plików terminów programu iCalendar (.ics), plików vCard (.vcf) i plików wiadomości programu Outlook (.msg). Rodzaj obiektu zwracanego przez tę metodę zależy od rodzaju otwartego elementu udostępnionego.

W poniższym przykładzie programu Microsoft Visual Basic for Applications (VBA) outlook kod otwiera plik SignedMessage.msg przy użyciu OpenSharedItem metody . Następnie kod próbuje usunąć plik .msg po zamknięciu elementu poczty. Jeśli plik .msg jest podpisany lub zaszyfrowany, kod powoduje błąd odmowy uprawnień . Jeśli jednak zostanie otwarty niepodpisany lub niezaszyfrowany plik .msg, kod usunie plik .msg zgodnie z oczekiwaniami.

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