Ошибка подключения к работающей программе с помощью Marshal.GetActiveObject - Операция недоступна (Исключение из HRESULT: 0x800401E3 (MK_E_UNAVAILABLE)) - PullRequest
0 голосов
/ 27 марта 2020

Это в модульном тесте. Мой код для запуска приложения в методе TestInitialize:

        var progId = "SldWorks.Application";
        var progType = System.Type.GetTypeFromProgID(progId);
        app = System.Activator.CreateInstance(progType) as ISldWorks;

Solidworks запускается просто отлично, я вижу, как он запускается. Когда я тестирую свой метод, я пытаюсь получить работающий в данный момент SolidWorks в конструкторе. В последней строке выдается сообщение об ошибке:

        string progId = "SldWorks.Application";
        solidWorksApp = System.Runtime.InteropServices.Marshal.GetActiveObject(progId) as ISldWorks;

При поиске ошибки я вижу много справок, объясняющих это Microsoft Office не запускается. Solidworks использует Office в некоторых функциях, но SolidWorks запускается просто отлично.

Я пытался

Thread.Sleep(5000);

После запуска SolidWorks, но это не помогло. Я подумал, что, возможно, Solidworks не была запущена полностью, когда я пытаюсь получить работающий экземпляр.

В SolidWorks уже есть надстройка, которая использует ту же технику для использования работающего приложения SolidWorks. Я отключил надстройку, чтобы проверить, может ли подключаться только один из них. Это не решило проблему.

РЕДАКТИРОВАТЬ: Это происходит только тогда, когда я пытаюсь запустить модульный тест. Этого не происходит, когда я использую метод или конструктор в обычном режиме.

Редактировать 2 Я начинаю думать, что это может быть проблема с разрешениями. Некоторые ответы в другом месте о подобной проблеме говорят о необходимости работать от имени администратора, чтобы получить Excel. Когда я запускаю свое приложение в режиме отладки через Visual Studio, все работает нормально. Когда я запускаю мой модульный тест, Marshal.GetActiveObject () завершается ошибкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...