2

我正在使用 VS 2008 安装和部署项目来部署混合的托管/非托管应用程序。我在使用内置注册属性(“Register”属性的“vsdraCOM”枚举值)注册混合模式 DLL 时遇到问题。作为一种解决方法,我添加了一个 .NET 自定义安装程序集(带有一个派生自 System.Configuration.Install.Installer。)我确定该类正在运行,并且许多操作通过该程序集中的代码成功安装和卸载,包括执行多个程序集的 Dll(Un)RegisterServer 入口点.

但是,一个 DLL 没有成功注册。它是唯一依赖于某些要安装到 GAC 的第 3 方可再发行程序集的 DLL。由于 VS 2008 的设置和部署项目中对这些程序集的内置支持,我已将这些程序集安装到 GAC,并且我知道这是有效的。我已经确认发生的事情是在安装程序执行 GAC 安装之前执行自定义操作。

唷。所以我的问题是,有没有办法强制安装程序在执行自定义操作之前执行 GAC 安装?有没有办法使用自定义操作的“条件”属性来做到这一点?如果没有,我最好的选择是什么?从 DLL 中捕获注册表项并将它们添加到安装程序的注册表设置中(不喜欢这样,因为将来有人可能会在类中添加新的 COM 服务器)?使用 .NET 代码手动将程序集安装到 GAC 中(还不知道该怎么做)?

谢谢,

戴夫

4

1 回答 1

2

您可以在 Visual Studio 中创建的安装项目非常有限。它只允许将自定义操作安排在 4 点。但是,MSI 允许在流程中的任何时候安排自定义操作,但对它们可以执行的操作有一些限制。

我的第一个解决方案是停止使用 Visual Studio 2008 作为安装开发工具。Visual Studio 团队试图抽象出创建安装的所有复杂性。然而,在这个过程中他们也带走了微星的所有灵活性。除了简单的安装之外,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 并针对您的安装运行验证脚本。这些脚本指出了许多问题,在部署到客户机器时,修复这些问题将为您节省无数时间。

于 2009-07-20T17:14:00.780 回答