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