我正在使用VS 2008安装和部署项目来部署混合托管/非托管应用程序。我在使用内置注册属性(“vsdraCOM”枚举的“Register”属性值)注册混合模式DLL时遇到了麻烦。作为一种解决方法,我添加了一个.NET自定义安装程序集(带有一个类派生自System.Configuration.Install.Installer。)我确定该类正在运行,并且许多操作通过该程序集中的代码成功安装和卸载,包括执行多个程序集的Dll(Un)RegisterServer入口点。
但是,一个DLL未成功注册。它是唯一依赖于某些希望安装到GAC的第三方可再发行组件的DLL。由于VS 2008的设置和部署项目中内置支持,我将这些程序集安装到GAC,我知道这是有效的。我已经确认发生的事情是在安装程序执行GAC安装之前自定义操作正在执行。
呼。所以我的问题是,有没有办法在执行自定义操作之前强制安装程序执行GAC安装?有没有办法使用自定义操作的“条件”属性来执行此操作?如果没有,那么我最好的选择是什么?捕获DLL中的注册表项并将其添加到安装程序的注册表设置中(不喜欢这样,因为将来有人可能会向该类添加新的COM服务器)?使用.NET代码手动将程序集安装到GAC中(不知道该怎么做)?
谢谢,
戴夫
答案 0 :(得分:2)
您可以在Visual Studio中创建的安装项目非常有限。它只允许在4点安排自定义操作。但是,MSI允许在流程中的任何时刻安排自定义操作,并对其可以执行的操作进行一些限制。
我的第一个解决方案是停止使用Visual Studio 2008作为设置开发工具。 Visual Studio团队试图抽象出创建安装的所有复杂性。然而,在这个过程中,他们也取消了MSI的所有灵活性。除了简单的安装,Wix,InstallShield或Wise是更好的产品。我开始使用Visual Studio进行安装,但最终工作量过大。总有一种解决方法需要实施,并且需要处理其副作用。
如果无法切换技术,则需要了解如何手动修改生成的MSI文件。在您的情况下,您将需要修改InstallExecuteSequence表http://msdn.microsoft.com/en-us/library/aa369500(VS.85).aspx。您可以通过Orca,http://msdn.microsoft.com/en-us/library/aa370557(VS.85).aspx或通过MSI API http://msdn.microsoft.com/en-us/library/aa372860(VS.85).aspx手动执行此操作。确保下载Orca并针对您的安装运行验证脚本。这些脚本指出了许多问题,在部署到客户机器时,修复将为您节省大量时间。