В Excel 2016, как я могу убедиться, что занятое приложение правильно игнорирует / отклоняет запросы на обработку новых электронных таблиц или открытых файлов

Перейдя в Excel 2016, мы столкнулись с проблемой, когда попытка открыть новый экземпляр Excel из меню "Пуск", командной строки или списка переходов теперь приводит к тому, что мы ничего не делаем, в то время как наше дополнение VSTO выполняет работу в задачах и блокирует (с сообщением прокачка) по основной теме. Похоже, что новый экземпляр Excel понимает, что он существует, и пытается вместо этого обработать его.

Конечно, я хотел бы, чтобы новый экземпляр Excel открывался прозрачно.

Обратите внимание, что пока надстройки выполняются в надстройке, они используют DispatcherFrame чтобы обеспечить прокачку сообщений, и нет никаких раздражающих сообщений такого рода This window is waiting for an OLE action to complete или прерывается при отладке, потому что окно не отвечает в течение 30 секунд или около того. Я считаю, что удаление этого могло бы помочь, но это также вызвало бы другие проблемы, поэтому я не хотел бы идти туда.

Подходы предпринимались:

  • Включение Application.IgnoreRemoteRequests (без влияния)
  • подклассов Application.hWnd с обычаем delegate int Win32WndProc(IntPtr hWnd, int msg, int wParam, int lParam); с помощью IntPtr SetWindowLong(IntPtr hWnd, int nIndex, Win32WndProc newProc) (сообщения на самом деле не получены)

То, что я не пробовал (и не знаю, стоит ли)

  • Попытка выяснить, реализует ли Excel сервер WCF в Office 2016, и перехватывать на него сообщения
  • Временное удаление ссылки на приложение из ROT (таблицы запущенных объектов) или иным образом выполнение каких-либо действий непосредственно в ROT.
  • Проверка других hWnds под тем, что сообщили Application в случае, если сообщения отправляются непосредственно на них (не знаю, с чего начать)

Может кто-нибудь объяснить, что на самом деле здесь происходит, и как этого избежать?

0 ответов

Другие вопросы по тегам