2017-02-14 54 views
0

有人请帮助我,因为我即将失去理智。无法安装安装程序类型。 - >无法加载一个或多个请求的类型

我在C#/ Visual Studio 2015/.Net 4.6.1中创建了一个Windows服务。然后我使用内置模板为它创建了一个简单的安装程序。自定义操作,ProjectInstaller类 - 一切正常。

我跑了几台计算机此安装程序,一切工作顺利,直到我试图给一个特定的客户端的Windows Server 2012的安装它,突然我得到

Unable to get installer types in the [xxx].exe assbmely. --> Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information. 

到目前为止,我已经试过是:

  1. 在服务器上安装.Net 4.6.1(之前未安装)。

  2. 将所有服务的依赖关系切换到CopyLocal = false,然后再返回。

  3. 冉融合日志并没有任何绑定错误。

  4. 使用完整日志记录对MSI进行扫描,并得到完全无用的日志,该日志只是再次显示相同的错误。

  5. 在ProjectInstaller类的所有代码路径周围放置try/catch。没有帮助。

这让我疯狂。如果没有办法记录发生了什么事情,如果给我这个问题,我怎么能确切地知道哪个dll/type?

任何人都可以请帮助吗?

回答

2

这是您的自定义操作程序集,服务。它想要的类型来自你的安装程序集,它使用反射来加载和实例化以发现安装程序类。 Fusion日志显示没有错误出于同样的原因,通过反射创建和实例化。内部没有Windows安装程序对托管代码安装程序类的支持,因此有一个C++填充Dll代表您执行此操作,并且此黑盒Dll中没有诊断程序。

几点建议:

  1. 你没有张贴您的设置的架构(64/32)(上投放),如果你的装配值为anycpu,64,32位等一些Windows服务器做默认情况下不安装32位子系统--WoW64是可选的 - 因此32位任何内容都可能不支持。如果是这种情况,您需要构建64位安装并使您的程序集成为64位。

  2. 您可能对另一个不可用的程序集有依赖性。这似乎不太可能,但请记住。

  3. 我相信这个问题已经解决,但是这让您知道托管代码自定义操作会发生什么,以及为什么他们以前在64位系统上失败。再次,这归结于您的设置的TargetPlatform,以及您的安装是x86还是x64,以及Server 2016是否支持WoW64安装。

https://blogs.msdn.microsoft.com/heaths/2006/02/01/64-bit-managed-custom-actions-with-visual-studio/

反正这些可能指向你走向一个解决方案。顺便说一下,如果我可以使用这个术语,“真正的安装程序”不要使用托管代码来安装服务,因为Windows安装程序具有内置支持来执行此操作。

+0

感谢您的详细回复。我的项目是x86;我只是将它重建为目标x64(当然必须经过Orca),现在它工作。所以,让我直接得到这个...一些Windows服务器根本不安装32位子系统 - 所以我的32位应用程序无法运行这个32位shim dll,因为它找不到它? – user884248

+0

如果我不清楚 - 非常感谢你!!!!!! – user884248

相关问题