C # .Net4: Правильное размещение (динамических) COM-объектов

Мне нужно автоматизировать офисные документы (Word и Excel) из моего приложения .Net4.

Поскольку я не могу заставить своих пользователей использовать определенную версию Office, я не использую сборки взаимодействия или tlbimp, поэтому мой проект не содержит дополнительных ссылок, и все приложение не будет работать, если Office не установлен ( функция просто не будет доступна).

Вместо этого я спрашиваю систему, какой COM-сервер может обрабатывать «Word.Application» или «Excel.Application»:

dynamic app = Activator.CreateInstance(Type.GetTypeFromProgID("Word.Application"));
app.Foo();

Меня беспокоит, как правильно избавиться от «приложения» Когда я закончу с ним, у меня есть две внутренние системы управления, о которых нужно беспокоиться (подсчет ссылок COM и отслеживание ссылок .Net). В идеале я должен иметь возможность обернуть динамический объект приложения в одноразовый класс-оболочку и убедиться, что на базовый COM-объект не ссылаются, когда оболочка удаляется.

РЕДАКТИРОВАТЬ: Также я хотел бы знать, как правильно заставить COM-объект "жить", когда я закончу с ним, поскольку Word находится в отдельном процессе. Я смогу создать экземпляр приложения Word, автоматизировать его, а затем освободить все мои ссылки, но приложение Word должно оставаться открытым.

9
задан Boris B. 28 February 2011 в 00:25
поделиться