Pregunta

Estoy intentando crear un complemento de Outlook 2003 con Visual Studio 2008 en Windows XP SP3 e Internet Explorer 7.

Mi complemento usa una página de inicio de carpetas personalizada que muestra mi formulario personalizado, que contiene el Control de vista de Outlook.

Recibo la Excepción de COM con la descripción de 'Excepción de HRESULT: 0xXXXXXXXX' cada vez que trato de establecer la propiedad Carpeta del OVC. El código de error es un número aleatorio, cada vez es diferente. No es el primer acceso a las propiedades del control, antes de eso, las propiedades View y ViewXML ya están configuradas. El control está marcado como Seguro para secuencias de comandos.

Estoy utilizando el valor de la propiedad CurrentFolder.FolderPath del explorador activo, que parece ser la correcta:

Outlook.Explorer currentExplorer = app.ActiveExplorer();
        if (currentExplorer != null)
        {
            ovcWrapper.Folder = currentExplorer.CurrentFolder.FolderPath;
        }

Esta es la parte superior del seguimiento de la pila:

System.Runtime.InteropServices.COMException (0xXXXXXXXX): Exception from HRESULT: 0xXXXXXXXX
at Microsoft.Office.Interop.OutlookViewCtl.ViewCtlClass.set_Folder(String pVal)
at AxMicrosoft.Office.Interop.OutlookViewCtl.AxViewCtl.set_Folder(String value)..

Esto sucede solo si la carpeta se encuentra en un archivo PST no predeterminado. Cambiar a la carpeta dentro del archivo PST predeterminado no producirá ninguna excepción.

Debo subrayar que todo funcionó bien antes de irme de vacaciones :). Parece que Windows XP instaló algunas actualizaciones que cambiaron la seguridad predeterminada de Internet Explorer o Outlook 2003 mientras estaba ausente.

En la otra (máquina virtual) con Office 2007 e Internet Explorer 6, sin ninguna actualización, todo funciona bien.

¿Fue útil?

Solución

Después de un tiempo, finalmente descubro cuál es la solución: cambiar un nombre del almacenamiento externo a algo nuevo.

Durante el inicio del complemento, carga el archivo PST no predeterminado y cambia su nombre (no el nombre del archivo pst, sino el nombre de la carpeta raíz) a " Documentos " ;.

Este es el código:

session.AddStore("C:\\test.pst"); // loads existing or creates a new one, if there is none.
storage = session.Folders.GetLast(); // grabs root folder of the new fileStorage.

if (storage.Name != storageName) // if fileStorage is brand new, it has default name.
{
      storage.Name = "Documents";
      session.RemoveStore(storage); // to apply new fileStorage name, it have to be removed and added again.
      session.AddStore(storagePath);
 }

La solución no es usar 'Documentos' como nombre, sino algo nuevo. El problema no está relacionado con un nombre específico.

Otros consejos

Dobri Dan, nency :)

No sé si realmente puedo ofrecer una " bala de plata " solución dada la información aquí ... pero aquí hay algunas ideas / notas para probar:

Habiendo trabajado con Outlook en algunos proyectos en el pasado, puedo decirle que a veces es un pájaro divertido cuando se trata de dar / otorgar acceso a usuarios / procesos externos. A veces requiere que el usuario confirme manualmente el acceso o inicie sesión ... así que asegúrese de tener

app.Session.Logon() 

cuidado en algún lugar.

La otra cosa que noté es el uso de app.ActiveExplorer () Asegúrese de que esta función esté devolviendo exactamente lo que cree que es; Toma la ventana topmost en el escritorio del usuario ... que es generalmente pero no siempre la ventana con la que está intentando trabajar, así que simplemente haga doble clic.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top