Если приложение COM + запущено, оно продолжит держать файл открытым. В любое время, когда вы хотите удалить компоненты, вы должны отключить и закрыть приложение во время удаления компонента, а затем снова включить приложение.
Для этого необходимо использовать семейство интерфейсов ICOMAdminCatalog или ICOMAdminCatalog2. Любая поисковая система найдет множество примеров выполнения следующих задач в VBScript. Я не знаю ни одного проекта оболочки .NET вокруг администрирования COM +.
Поток логики, которую я считаю лучшей практикой:
- Отключить приложение
- Завершение работы приложения
- Отслеживание и ожидание завершения активных вызовов
- Удаление компонента
- Включить приложение
Вы также можете запустить приложение, но оно должно запуститься автоматически при следующем вызове приложения.
Каждый из этих шагов использует различные аспекты классов администрирования, и некоторые из них уже решены как отдельные ответы.
Организация
Прежде чем писать код администрирования COM +, вы должны понять иерархию системы. У Microsoft это хорошо задокументировано: http://msdn.microsoft.com/en-us/library/windows/desktop/ms687763%28v=vs.85%29.aspx
Отключение
Вам нужно будет загрузить приложение из коллекции приложений. Свойство для установки - «IsEnabled». Не забудьте сохранить изменения после изменения свойства.
Отключение
Вот хороший ответ: Как перезапустить приложение COM + на удаленном сервере из .NET?
Безопасно вызывать ShutdownApplication для приложения, которое не запущено.
Мониторинг
Вам нужно будет найти приложение в коллекции ApplicationInstances. Если он не найден, значит, он отключился (или вообще никогда не работал). Если он найден, спите в течение приемлемого периода времени и ищите его снова в обновленном экземпляре коллекции.
Uninstall / Переустановка
Вы уже решили эту часть.
Включение
Процесс включения такой же, как и при отключении приложения, но с другим значением свойства IsEnabled.