Я написал приложение VB.NET Windows Forms, которое запрашивает строку из внепроцессного COM-объекта каждый раз, когда срабатывает событие активации. Моя форма имеет две вкладки, поэтому мне нужно программно переключаться на нужную вкладку каждый раз, когда мое окно получает фокус. Работает нормально, пока...
Случайно кто-то запустил vbscript (да, скрипт, а не exe), который содержит:
Set shell = CreateObject("WScript.Shell")
shell.AppActivate("Window Title That Matches My App")
Этот скрипт постоянно приводит к сбою моего приложения. Обычно так плохо, что диалоговое окно Exception обычно не может рисовать себя. Приходится убивать из диспетчера задач. Иногда исключение можно прочитать. (Я также подтвердил исключение, подключившись к работающему exe с помощью Visual Studio). Это: «System.Runtime.InteropServices.COMException (0x8001010D): исходящий вызов не может быть выполнен, так как приложение отправляет синхронный входной вызов».
Что меня действительно беспокоит, так это то, что мое приложение имеет обнаружение нескольких экземпляров с использованием мьютекса, и если существующий экземпляр запущен, мой собственный код (скомпилированный) использует собственное ключевое слово AppActivate VB.NET, и это НЕ приводит к сбою моего приложения. Он активирует работающий экземпляр и выходит из избыточного экземпляра, как и ожидалось.
Проблема, по-видимому, вызвана исключительно AppActivate cscript/wscript. Я написал трехстрочный файл .vbs, чтобы подтвердить это. Это повторяемо.
Есть ли способ поймать или избежать этого в моем скомпилированном приложении?