在 64 位计算机上卸载期间,Dllhost.exe*32 无法释放 32 位资源

发布于 2024-10-07 21:05:19 字数 528 浏览 12 评论 0原文

我正在 Windows 2008 R2 Server(即 64 位操作系统)上以兼容模式安装 32 位应用程序 安装和功能运行良好。

但是,当尝试卸载该应用程序时,我们收到与“COM Surrogate”相关的错误。此错误是随机发生的。

将显示一个消息框,显示“卸载前关闭以下应用程序”,并显示“COM 代理(进程 ID)”。显示的 ProcessID 属于 dllhost.exe*32 进程。这是特殊的dllhost.exe,在64位操作系统中启动,以兼容模式支持32位应用程序。应用程序所需的 32 位二进制文​​件由此 exe 托管。仅当任何 32 位应用程序在 64 位计算机上运行时,此 exe 的生命周期才有效。

理想情况下,在卸载过程中,dllhost.exe*32 应该优雅地终止,并且卸载应该顺利。但是,有时这种情况不会发生。

如果我等待一段时间或手动杀死 dllhost.exe*32,则卸载工作正常。

我正在查看的是 dllhost.exe*32 无法优雅死亡的确切原因及其解决方案。

如果有人可以在这方面帮助我们,请。

I am installing 32 bit application, in compatibility mode, on Windows 2008 R2 Server i.e. a 64-bit O.S.
The Installation and the Functionality is working fine.

But, when trying to uninstall the application, we are receiving a error related to ‘COM Surrogate’. This error occurs randomly.

A message box is displayed saying “Close the below applications before uninstallation” and it displays the “COM Surrogate (Process ID)”. The ProcessID displayed is of the dllhost.exe*32 process. This is the special dllhost.exe, launched in 64-bit OS to support the 32-bit applications in compatibility mode. The 32-bit binaries required for the application are hosted by this exe. The life of this exe is only when any of the 32-bit application is running on a 64-bit machine.

Ideally, during uninstallation, dllhost.exe*32 should die gracefully and the uninstallation should be smooth. But, this is not happening some times.

If I wait for sometime or kill the dllhost.exe*32 manually then uninstallation works fine.

What I am looking at is the exact cause why the dllhost.exe*32 is not able to die gracefully and the resolution to it.

Please, if anyone could help us in this regard.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

迷迭香的记忆 2024-10-14 21:05:19

我的猜测是,卸载过程甚至不会要求进程终止,因为没有通用的过程可以这样做。相反,它预计卸载开始时应用程序不会运行。

由于它显然是一个正在提供服务的 COM 对象,因此您应该找出哪个(其他)应用程序进程正在使用该 COM 对象,并让该进程终止。更暴力的方法是:用适当的应用程序(COM 服务器进程)替换 COM dll,并安排该应用程序提供 API 来终止它。

My guess is that the uninstallation procedure does not even ask the process to terminate, because there is no universal procedure to do so. Instead, it expects the application not be running when the uninstallation starts.

As it is apparently a COM object that is being served, you should find out what (other) application process is using the COM object, and make that process terminate. As a more brute-force approach: replace the COM dll with a proper application (COM server process), and arrange that application to provide an API to terminate it.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文