Это в модульном тесте. Мой код для запуска приложения в методе 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 () завершается ошибкой.