Metoda OpenSharedItem dla programu Outlook obsługuje uchwyt pliku dla podpisanych plików msg

Oryginalny numer KB:   2633737

Symptomy

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

Przyczyna

To zachowanie występuje, jeśli plik msg jest podpisany lub zaszyfrowany (wiadomości oparte na SMIME). Jest to ograniczenie tego, jak program Outlook wewnętrznie zarządza przetwarzaniem i uchwytami plików msg opartymi na programie SMIME. Program Outlook weryfikację w tle podpisu wiadomości i zwolni uchwyt pliku do pliku msg, gdy program Outlook uzyska czas bezczynności. Plik msg można usunąć tylko po zakończeniu całego wymaganego przetwarzania przez program Outlook i zwolnieniu uchwytu 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 żadnych planów zmiany tego zachowania.

Więcej informacji

Program Office Outlook 2007 i Outlook 2010 zapewniają metodę otwierania plików terminów w pliku OpenSharedItem iCalendar (ics), plików vCard (vcf) i plików wiadomości programu Outlook (msg). Rodzaj obiektu zwracanego za pomocą tej metody zależy od rodzaju otwieranego elementu udostępnionego.

W poniższym przykładzie w programie Outlook w języku Microsoft Visual Basic for Applications (VBA) kod otwiera plik SignedMessage.msg przy użyciu OpenSharedItem metody. Kod spróbuje następnie usunąć plik msg po zamknięciu elementu poczty. Jeśli plik msg jest podpisany lub zaszyfrowany, kod powoduje błąd Odrzucono uprawnienie. Jednak w przypadku otwarcia niepodpisanego lub niezaszyfrowanego pliku msg kod usuwa 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