Windows installer 无法在关联中获取安装程序类型--&燃气轮机;无法加载一个或多个请求的类型

Windows installer 无法在关联中获取安装程序类型--&燃气轮机;无法加载一个或多个请求的类型,windows-installer,Windows Installer,谁来帮我,因为我快要疯了 我在C#/Visual Studio 2015/.Net 4.6.1中创建了一个Windows服务。然后,我使用内置模板为它创建了一个简单的安装程序。自定义操作,ProjectInstaller类-一切正常 我在几台计算机上运行了这个安装程序,一切都很好,直到我尝试在特定客户端的Windows Server 2012上安装它,突然我发现 Unable to get installer types in the [xxx].exe assbmely. --> Una

谁来帮我,因为我快要疯了

我在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.
到目前为止,我尝试的是:

  • 已在服务器上安装.Net 4.6.1(以前未安装)

  • 将服务的所有依赖项切换为CopyLocal=false,然后再次切换

  • 运行了Fusion日志,没有任何绑定错误

  • 用完整日志运行MSI,得到一个完全无用的日志,只是再次显示相同的错误

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

  • 这让我快发疯了。如果无法记录正在发生的事情,我怎么能确切地知道哪个dll/类型给了我问题


    有人能帮忙吗?

    这是您的自定义操作程序集,即服务。它需要的类型来自安装程序程序集,该程序集使用反射来加载和实例化,以发现安装程序类。融合日志不会显示出于相同原因的错误,也不会通过反射进行创建和实例化。在内部,没有托管安装程序类的Windows安装程序支持,因此有一个C++ SHIM DLL,代表您做所有这些操作,并且没有来自这个黑盒DLL的诊断。p> 一些建议:

  • 您没有发布安装程序(TargetPlatform)的体系结构(64/32),如果您的程序集是AnyCpu、64、32位等。某些Windows服务器默认不安装32位子系统-WoW64是可选的-因此可能根本不支持任何32位。如果是这种情况,则需要构建64位安装并使程序集为64位

  • 您可能依赖于另一个不可用的程序集。这似乎不太可能,但请记住

  • 我相信这个问题已经解决了,但这让您了解托管代码自定义操作会发生什么,以及它们以前在64位系统上失败的原因。同样,这取决于安装程序的TargetPlatform,以及您的安装是x86还是x64,以及Server 2016是否支持已安装的WoW64


  • 无论如何,这些可能会为您指出一个解决方案。顺便说一句,“真正的安装者”,如果我可以用这个词的话,不要用托管代码来安装服务,因为Windows Installer有内置的支持

    谢谢你的详细答复。我的项目是x86;我刚刚将其重建为目标x64(当然必须通过奥卡),现在它可以工作了。让我直说吧。。。有些Windows服务器根本不安装32位子系统-因此我的32位应用程序无法运行此32位垫片dll,因为它找不到它?我在Worked找到了一个非常适合我的解决方案