Dllhost.exe * 32 не может освободить 32-разрядные ресурсы во время удаления на 64-разрядной машине - PullRequest
0 голосов
/ 15 декабря 2010

Я устанавливаю 32-разрядное приложение в режиме совместимости на Windows 2008 R2 Server, т.е. на 64-разрядную ОС. Установка и функциональность работают нормально.

Но, при попытке удалить приложение, мы получаем ошибку, связанную с «COM Surrogate».Эта ошибка возникает случайно.

Появится окно с сообщением «Закройте нижеприведенные приложения перед удалением» и отобразит «Суррогат COM (Идентификатор процесса)».Отображаемый ProcessID относится к процессу dllhost.exe * 32.Это специальный dllhost.exe, запущенный в 64-битной ОС для поддержки 32-битных приложений в режиме совместимости.32-разрядные двоичные файлы, необходимые для приложения, размещаются в этом исполняемом файле.Срок действия этого exe-файла возможен только в том случае, если любое из 32-разрядных приложений запущено на 64-разрядной машине.

В идеале, при удалении dllhost.exe * 32 должен умереть изящно, а удаление должно быть плавным.Но это не происходит в некоторых случаях.

Если я подожду некоторое время или вручную убью dllhost.exe * 32, тогда удаление работает нормально.

То, на что я смотрю, является точной причиной, почемуdllhost.exe * 32 не может умирать изящно и разрешение к нему.

Пожалуйста, если кто-нибудь может помочь нам в этом отношении.

1 Ответ

0 голосов
/ 15 декабря 2010

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

Поскольку это, очевидно, обслуживаемый COM-объект, вы должны выяснить, какой (другой) процесс приложения использует COM-объект, и заставить этот процесс завершиться. В качестве более грубого подхода: замените COM dll подходящим приложением (процесс COM-сервера) и подготовьте это приложение для предоставления API для его завершения.

...