【问题标题】:Force GAC installation before running .NET custom action?在运行 .NET 自定义操作之前强制安装 GAC?
【发布时间】:2010-11-12 08:39:14
【问题描述】:

我正在使用 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 中(还不知道该怎么做)?

谢谢,

戴夫

【问题讨论】:

    标签: installation windows-installer gac custom-action conditional-statements


    【解决方案1】:

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

    【讨论】:

    • 谢谢,我们确实使用 installshield,但构建计算机再次运行需要几周时间,我需要尽快进行可靠的安装。 MSI API 解决方案听起来很有希望。仅供参考,我发现 System.EnterpriseServices.Internal.Publish.GACInstall() 将在 GAC 中安装任意程序集,但这并不理想,原因有很多(“内部”、错误检查少、不适合回滚/卸载语义。)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-23
    相关资源
    最近更新 更多