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

Переехав в 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, в случае, если сообщения отправляются непосредственно им (не знаю, с чего начать)

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

...