【问题标题】:MethodInfo.Invoke requires admin on windows 7?MethodInfo.Invoke 在 Windows 7 上需要管理员吗?
【发布时间】:2010-12-13 20:36:58
【问题描述】:

所以我在运行时加载程序集,并且我还根据程序集类型使用泛型。为了获得正确的类型,每个 DLL 都在实现一个工厂,我希望它在那里用正确的泛型类型实例化类。

            Type factoryType = assembly.GetType("MyCompany.ScenarioPlayer.PlayerFactory");
            MethodInfo method = factoryType.GetMethod("CreatePlayer", BindingFlags.Public | BindingFlags.Static);

            player = (IScenarioPlayer)method.Invoke(null, null);

此代码在方法上失败。当我没有管理权限时调用。以我使用它的方式对 MethodInfo.Invoke 的任何调用都需要管理员,这是否正确?我进入了我的 DLL 代码,它甚至没有通过这个调用进入工厂。

edit : 结果发现目标 DLL 存在未考虑的依赖项。不过,我确实喜欢提出的 MEF 框架想法。

【问题讨论】:

  • 发布异常消息和堆栈跟踪。

标签: c# windows-7 invoke administration methodinfo


【解决方案1】:

以您使用它的方式使用反射来解决在运行时创建工厂的问题是一个坏主意。你不仅避免耦合(你有一个引用单一类型的硬编码字符串),你正在打开一个受伤的世界。这些东西都不是强类型的。

如果您要创建可插拔组件,我建议您查看MEF 之类的内容。它已经解决了您面临的问题并且以一种更好、更快和更易于维护的方式来解决。

【讨论】:

    【解决方案2】:

    这与 MethodInfo 没有任何关系,而是 MethodInfo 最有可能在做什么。您可以通过调用相关方法并查看它是否在非管理员环境中工作来测试它。

    【讨论】:

    • 这实际上帮助我解决了我的问题,尽管这是我应该做的第一件事。谢谢
    猜你喜欢
    • 1970-01-01
    • 2011-03-06
    • 2013-12-24
    • 2011-07-29
    • 2015-06-20
    • 2014-05-31
    • 2012-08-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多