Assembly.LoadFrom():模块应该包含程序集清单

时间:2014-07-17 11:08:50

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

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

Registering使用dll的{​​p> 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(使用代码)

1 个答案:

答案 0 :(得分:2)

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

请将其留给机器所有者来处理,WIA需要在自动化界面之外正确注册。运行其安装程序是一项艰难的要求。 WIA第2版首次在Vista上推出,后端移植到XP。微软有一个下载可用,我注意到几个月前它已经丢失了。这可能与终止XP支持有关。没有未来,XP已经完成并且结束了。在superuser.com上询问此安装程序可能的迷你副本,超出了Microsoft的覆盖范围。如果遇到麻烦,那么你就无法给微软打电话,这是另一个不能解决问题的原因。