无法卸载 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的主要内容,如果未能解决你的问题,请参考以下文章
SYSTEM32目录下.dll文件无法删除,文件正在被另一个人或程...怎么删除
VS2010的MFC程序如何调用动态库文件(dll文件)?放在system32中仍然编译无法打开d