Есть ли способ использовать код для определения того, будет ли Outlook автоматически захватывать существующий экземпляр Outlook, а не запускать новый экземпляр Outlook? (Предпочтительно код VBA.) В идеале также можно было бы включить/выключить это поведение программно.Обнаружение состояния Outlook/повторного использования и запуск нескольких экземпляров Outlook
Задача здесь - запустить несколько процессов одновременно с данными в одном наборе учетных записей Outlook, поскольку некоторые процессы Outlook могут занимать много времени. Длительные процессы затем могут продолжать использовать один экземпляр, тогда как другие процессы короткой продолжительности начинаются и завершаются в другом. Разумеется, потребуется помощь, чтобы гарантировать, что процессы используют правильный экземпляр Outlook и что изменения, сделанные одним экземпляром, не ставят под угрозу поведение другого.
По умолчанию при запуске Outlook 2013 или 2010 они автоматически запускаются в состоянии, гарантирующем запуск только одного экземпляра Outlook. Это верно даже при использовании VBA кода:
Set appOl = CreateObject(Class:="Outlook.Application")
Согласно сообщениям, как http://amal.net/?p=2190 (2009) и http://www.nextofwindows.com/opening-multiple-instances-of-outlook-on-windows (неопределенная дата) это поведение задаются с помощью переключателя/рециркуляции в запуске Outlook, по умолчанию ярлык, созданный при установке Outlook. Удаление коммутатора должно предотвращать поведение и разрешать создание нескольких экземпляров Outlook. Однако установки Outlook 2010 (на хосте Vista64) и Outlook 2013 (на хосте Windows 10) ведут себя так, как если бы был переключатель/recycle, хотя их ярлыки запуска Outlook не включают любой аргумент/recycle.
Учитывая способ обнаружения и, надеюсь, изменить поведение Outlook, такой код можно использовать для создания дополнительного экземпляра Outlook при запуске долгого процесса и выключения нового экземпляра Outlook, когда он завершается :
' Detect whether a New Outlook instance can be created &
' set the value of NewOutlookInstanceIsPossible to True/False
If NewOutlookInstanceIsPossible Then
Set appOl = VBA.CreateObject(Class:="Outlook.application") 'New instance
End If
' .... Code that does something using AppOl
If NewOutlookInstanceIsPossible Then appOl.Quit 'Quit new instance`
Спасибо, Димитрий. Я посмотрю на CDO, с которым я не сталкивался раньше. Я посмотрел на Redemption, и это выглядело довольно большим сюитом для моих нужд. –
[Состояние Microsoft] (https://support.microsoft.com/en-us/kb/2028411), что самый последний CDO 1.2.1 может быть установлен только в том случае, если Outlook 2007 установлен ** и **, что, в то время как он может использоваться с более поздней версией Outlook, если вы затем обновляете, это использование устарело, поскольку большинство функций теперь доступны в более новых версиях Outlook. Как вы говорите, Димитрий, похоже, что единственный способ получить функциональность - использовать Extended MAPI прямо или косвенно. Наверное, мне нужно найти другой способ достижения моих целей. Спасибо Димитрию Стреблеченко. –