【问题标题】:Assembly.LoadFrom(): The module was expeted to contain assembly manifestAssembly.LoadFrom():该模块应包含程序集清单
【发布时间】:2014-07-17 11:08:49
【问题描述】:

我有一个在 Win7 上运行但不在 WinXp 上运行的应用程序(是的,我们还有一些) 原因是dll:wiaaut.dll

Registering dll 使用 regsvr32 有效。但首选方法是通过代码(较少的人工) 所以我们考虑使用以下代码在load() 上加载和注册程序集:

       Dim asm As Assembly = Assembly.LoadFrom(System.Environment.CurrentDirectory & "\WIA\wiaaut.dll")
        Dim regAsm As RegistrationServices = New RegistrationServices()
        Dim bResult = regAsm.RegisterAssembly(asm, AssemblyRegistrationFlags.SetCodeBase)

但在第一行我得到了错误:The module was expeted to contain assembly manifest 我在这里尝试用其他类似的问题来解决它:

SO Question 1不是同一个问题

SO Question 2

  • 我的应用程序的目标框架是 4.0(所以没有问题)
  • 将我的目标配置更改为 x86(仍然存在问题),或任何其他相关配置

SO Question 3没有实际解决方案

SO QUestion 4没有答案

...还有更多...

所以,对于你们那里的白痴,这是我的问题:

  1. 我怎样才能避免异常以便代码正常工作。
  2. 或者有没有其他方法可以在当前机器上注册一个dll(使用代码)

【问题讨论】:

  • 来自MSDN,引用“使用 WIA 自动化层 API 的应用程序需要 Windows Vista 或更高版本。不支持早期版本的 Windows。”对不起!
  • 奇怪,虽然我手动注册 dll 让它工作了....
  • 是的.. 很可能您可以在 Windows 中摆脱它,但要从代码中做到这一点,现在需要 .manifest 文件/嵌入之类的东西。不过我会继续寻找……自从我弄乱 XP 以来已经有一段时间了!

标签: .net vb.net dll .net-assembly


【解决方案1】:

这是不可能的,wiaaut.dll 是一个用 C++ 编写的非托管 COM 服务器。只有 .NET 程序集可以使用 Assembly.Load/From() 加载并像这样注册。像这样的 COM 服务器需要通过其 DllRegisterServer() 入口点进行注册,通常由 Regsvr32.exe 调用

请务必让机器所有者自行处理,除了自动化接口之外,还需要正确注册 WIA。运行它的安装程序是一项硬性要求。 WIA 版本 2 最初在 Vista 上可用,后来被移植到 XP。微软为此提供了一个下载,我注意到几个月前它已经丢失了。这可能与终止 XP 支持有关。这没有未来,XP 已经完蛋了。在 superuser.com 上询问此安装程序的可能超出 Microsoft 范围的杂散副本。如果有问题,你就不能打电话给微软,这也是不把这个问题作为你的问题的另一个原因。

【讨论】:

  • 正如我所担心的......为什么哦为什么我们的 IT 基础设施团队如此落后于计划......不过感谢您提供的信息!
猜你喜欢
  • 2012-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多