我使用 EZShellExtensions.net 编写了一个 shell 扩展。当我以我的身份登录时,它在我的开发环境中以及以我的身份登录的任何其他系统中都运行良好。对于所有其他用户,我创建的复制 Hook 永远不会出现。我已经使用 NirSoft 的 RegDLLView 来验证 DLL 是否已注册,但没有成功。
我可以检查什么以了解发生这种情况的原因?
仅供引用
我很乐意将我的代码副本发送给任何想要帮助解决此问题的人。 EZShellExtensions.NET 的评估期为 30 天。
更新 如果有人感兴趣,现在可以使用供应商注册工具时的 ProcMon 输出作为 CSV/PML 文件。
解决
我最终将控制台输出添加到 dll 以进行调试。事实证明,当以除我以外的任何用户身份运行时,计时器没有启动(不知道为什么)。此问题已得到修复。
最佳答案
这表明 shell 扩展已在 HKCU\Software 配置单元而不是 HKLM\Software 中注册。只有后一个配置单元使所有用户都可以使用扩展。这通常是因为 UAC 阻止写入 HKLM\Software 除非执行写入的程序被提升。
如果这个库带有专门的注册程序,他们通常会这样做,那么一定要从提升的命令提示符下运行它。开始 + 所有程序,附件文件夹,右键单击命令提示符链接,然后单击“以管理员身份运行”。重新运行注册工具。
如果您仍然遇到问题,那么 SysInternal 的 ProcMon 工具可以准确地向您显示写入内容的位置。不要犹豫,使用供应商的支持 channel 。
关于c# - 为什么我的 DLL 只为一个用户注册?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8916748/