Как root вызвать, почему COM + блокирует DLL? - PullRequest
0 голосов
/ 20 января 2020

У меня есть приложение, которое должно быть установлено в COM +. Установка через RegSvcs работает нормально, однако, когда я пытаюсь удалить приложение, некоторые библиотеки DLL блокируются и остаются в папке установки. Обратите внимание, что это происходит только после того, как я позвоню в приложение COM +; в противном случае удаление проходит гладко.

Моему приложению требуется чистая установка и возврат, но мне трудно определить, почему эти библиотеки DLL блокируются. Скриншот заблокированных сторонних библиотек DLL находится ниже; два, соответствующие моему приложению, не отображаются.

Моя сборка помечена как не-ComVisible, а единственный класс, производный от ServicedComponent, открыт для COM +. Я пытался форсировать сборку мусора после завершения вызова, но, похоже, это не имеет значения. Итак, некоторые вопросы:

  • Можно ли предположить, что это происходит из-за неправильной реализации IDisposable где-то, или это может быть что-то еще?
  • Должен ли я предполагать, что существует отдельная проблема, связанная с каждой заблокированной DLL, или возможно, что существует проблема с одним классом, которая приводит к блокировке всех этих DLL?
  • Любые предложения, как я мог бы go отладить это?

Любая помощь будет принята с благодарностью - чувствуя себя полностью потерянным на этом.

Locked DLLs

1 Ответ

1 голос
/ 20 января 2020

Я понял ... Мне нужны были следующие атрибуты:

[assembly: ApplicationAccessControl(Value=false, AccessChecksLevel=AccessChecksLevelOption.ApplicationComponent)]
[assembly: ApplicationActivation(ActivationOption.Server)]

Вызовы перенаправляются в мое приложение из системной учетной записи, но без второго атрибута он, очевидно, был активирован в процессе создания.

...