Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Número de KB original: 2633737
Síntomas
El OpenSharedItem
método del modelo de objetos para Microsoft Outlook no libera el identificador de archivo de un archivo .msg hasta que Outlook obtiene algún tiempo de inactividad.
Causa
Este comportamiento se produce si el archivo .msg está firmado o cifrado (mensajes basados en SMIME). Es una limitación de cómo Outlook administra internamente el procesamiento y los identificadores de archivos de los archivos de .msg basados en SMIME. Outlook realiza una comprobación en segundo plano de la firma en el mensaje y libera el identificador de archivo en el archivo .msg cuando Outlook obtiene algún tiempo de inactividad. El archivo .msg solo se puede eliminar cuando Outlook ha terminado todo el procesamiento necesario y ha liberado el identificador de archivo.
Puede retrasar el intento de eliminar el archivo, aunque no hay ninguna manera directa de determinar cuándo Outlook liberará el bloqueo de archivo.
Solución
No hay planes para cambiar este comportamiento.
Más información
Office Outlook 2007 y Outlook 2010 proporcionan el OpenSharedItem
método para abrir archivos de citas de iCalendar (.ics), archivos vCard (.vcf) y archivos de mensajes de Outlook (.msg). El tipo de objeto devuelto por este método depende del tipo de elemento compartido que se abre.
En el ejemplo de Outlook de Microsoft Visual Basic para Aplicaciones (VBA) que sigue, el código abre un archivo SignedMessage.msg mediante el OpenSharedItem
método . A continuación, el código intenta eliminar el archivo .msg después de cerrar el elemento de correo. Si el archivo .msg está firmado o cifrado, el código produce un error de permiso denegado . Sin embargo, si se abre un archivo de .msg sin signo o sin cifrar, el código elimina el archivo .msg según lo previsto.
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