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

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

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

谢谢,

戴夫

有帮助吗?

解决方案

您可以在 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 并针对您的安装运行验证脚本。这些脚本指出了许多问题,修复这些问题将为您在部署到客户计算机时节省无数时间。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top