Если приложение 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. Если он не найден, значит, он, должно быть, отключился (или вообще никогда не работал). Если он обнаружен, перестаньте спать в течение приемлемого периода времени и снова найдите его в обновленном экземпляре коллекции.
Удалить / переустановить
Эта часть у вас уже решена.
Включение
Процесс включения такой же, как и при отключении приложения, но с другим значением свойства IsEnabled.
person
hurcane
schedule
11.02.2013