无法卸载 system32 文件夹中的 dll

Posted

技术标签:

【中文标题】无法卸载 system32 文件夹中的 dll【英文标题】:Unable to uninstall a dll in system32 folder 【发布时间】:2013-08-01 14:57:47 【问题描述】:

我的 MSI 内置在 WiX 3.7 中,在 system32 文件夹中安装了一个 DLL。卸载时,所有组件都被删除,除了 system32 文件夹中的 dll。我可以在 SharedDLLs 注册表项 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SharedDLLs] 中看到这个 DLL,并且引用计数设置为 1

这个 DLL 对我的应用程序非常特殊,没有其他应用程序使用它。如果我删除 DLL 的注册表项 (SharedDlls) 并尝试卸载,则 DLL 将从 system32 文件夹中删除。

我的主要要求是当我尝试卸载时,system32 文件夹中的 DLL 也必须被删除。有人可以建议如何实现吗?

如果 WiX 代码中的任何标志可以阻止此 DLL 进入 sharedDlls [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SharedDLLs]

【问题讨论】:

如果文件特定于您的应用程序,它在 system32 中的作用是什么?是驱动文件吗? 【参考方案1】:

在 wix 中,安装 dll 的组件应该具有 SharedDllRefCount="No" 属性,或者根本不明确设置 SharedDllRefCount 属性(默认值为“No)。构建 MSI 后,双检查您的 dll 组件的 Component 表中的属性列是否没有设置 0x0008 位 (msidbComponentAttributesSharedDllRefCount - http://msdn.microsoft.com/en-us/library/windows/desktop/aa368007(v=vs.85).aspx)。

【讨论】:

以上是关于无法卸载 system32 文件夹中的 dll的主要内容,如果未能解决你的问题,请参考以下文章

CHM无法打开的处理方法

SYSTEM32目录下.dll文件无法删除,文件正在被另一个人或程...怎么删除

VS2010的MFC程序如何调用动态库文件(dll文件)?放在system32中仍然编译无法打开d

安装软件时显示runtime错误怎么解决

因以下文件的损坏或丢失 windows无法启动:<windows root>\system32\hal.dll

无法定位序数4444于动态链接库libcurl.dll应当如何解决?