我正在使用VS 2008安装和部署项目来部署混合托管/非托管应用程序。我在使用内建注册属性(“vsdraCOM”枚举“Register”属性的值)注册混合模式DLL时遇到了问题。作为解决方法,我添加了一个.NET自定义安装程序集(带有一个类派生自System.Configuration.Install.Installer。)我确定该类正在运行,并且一些操作已成功安装并通过该程序集中的代码进行卸载,包括执行多个程序集的Dll(Un)RegisterServer入口点。在运行.NET自定义操作之前强制安装GAC?
但是,一个DLL没有成功注册。它是唯一依赖于想要安装到GAC的第三方可再发行组件程序集的DLL。我已经将这些程序集安装到了GAC中,这要归功于VS 2008的安装和部署项目中的内置支持,而且我知道这是可行的。我已经确认,发生的情况是自定义操作在安装程序执行GAC安装之前正在执行。
噢。所以我的问题是,有没有办法强制安装程序在执行自定义操作之前执行GAC安装?有没有办法使用自定义操作的“条件”属性来做到这一点?如果不是,我最好的选择是什么?从DLL中捕获注册表项并将它们添加到安装程序的注册表设置中(不要这样做,因为将来有人可能会向该类添加新的COM服务器)?使用.NET代码手动将程序集安装到GAC中(不知道如何执行此操作)?
感谢,
戴夫
谢谢,我们确实使用installshield,但它会在生成计算机再次运行几个星期之前,我需要尽快安装。 MSI API解决方案听起来很有前途。仅供参考,我发现System.EnterpriseServices.Internal.Publish.GACInstall()会在GAC中安装一个任意程序集,但这并不理想,原因很多(“内部”,很少有错误检查,对于回滚/卸载语义。) – 2009-07-20 17:33:03