【问题标题】:Prevent C# Dll from being loaded for certain apps阻止为某些应用加载 C# Dll
【发布时间】:2010-11-27 05:25:43
【问题描述】:

大家好,

我有一个用 C# 编写的 shell 工具栏扩展。它只打算在 Windows Explorer 中使用,所以我想阻止 DLL 在 Internet Explorer 中加载。 Windows 提供了大量仅在 IE 中加载扩展的方法,但似乎无法仅在资源管理器中加载。我知道在加载 DLL 后,我可以在不同的地方执行各种检查,但理想的情况是完全阻止 DLL 加载。

现在,如果它是用 C++ 编写的,我会在 DllMain 中调用 GetModuleFileName,检查可执行文件是否为 iexplore.exe,如果是,则在附加时返回 false。但是C#中没有DllMain;微软不相信我们可以很好地使用加载程序锁。有没有其他方法可以选择性地阻止加载 C# DLL?

【问题讨论】:

    标签: c# internet-explorer dll windows-explorer shell-extensions


    【解决方案1】:

    不要在 .NET 中使用 Shell 扩展处理程序 http://blogs.msdn.com/b/junfeng/archive/2005/11/18/494572.aspx

    【讨论】:

    • 不相关...给出建议的原因是在 .NET 中进行 shell 扩展可能会导致使用 shell 对话框的非托管程序出现 CLR 注入问题。用不同 CLR 版本编写的扩展可能会相互冲突。但这仅与上下文菜单处理程序或可在 shell 对话框中使用的其他扩展等内容相关。工具栏仅由两个应用程序加载:Windows Explorer 和 Internet Explorer。不仅如此,.NET 现在支持多个 CLR 版本的内存中并行操作,所以现在这已经完全过时了。
    • 我没有意识到它已经过时了,谢谢
    【解决方案2】:

    第 3 部分:注册我们的 AppBar http://www.codeproject.com/KB/shell/csdoesshell3.aspx?print=true

    我不得不在单独的帖子中发送这个链接,因为新用户不允许在 1 个帖子中发送多个链接。

    【讨论】:

    • 您提供的链接涉及 AppBars,它与 Explorer 工具栏(正式称为 DeskBands)完全不同。 AppBars 仅在资源管理器中加载,而不是在 IE 中加载,因此它们与我的问题并不真正相关......
    • 谢谢保罗,我一直在尝试查看是否可以使用自动运行找到相关的注册表项,该注册表项将为 Windows 资源管理器注册一个资源管理器工具栏,但还没有运气,有谁知道没有办法使用注册表为资源管理器注册一个资源管理器工具栏?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-14
    • 2018-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-12
    相关资源
    最近更新 更多