当前位置: 首页 > 知识库问答 >
问题:

MSI vs nuget软件包:哪一个更适合连续交付?

都浩淼
2023-03-14

让我们讨论以下主题。有一个应用程序目前正在使用熟悉的xcopy方法部署。这种方法很难管理依赖项、文件更新等。有一种想法是,在一些包的帮助下开始应用程序部署,就像在Linux中借助RPM一样,但对于Windows。

所以我有个问题:在windows classic windows installer(msi)或nuget或其他软件上使用哪个软件包系统更好?

共有2个答案

益兴生
2023-03-14

我现在正在走这条路,我继承了安装程序使用MSI/WiX的软件,但考虑将我们的流程转换为持续交付并推出在没有客户端交互的情况下安装的更新。我认为将nuget归类为SDK工具是不正确的,本质上它是一个部署版本化文件集的工具。此外,如果您正在部署的软件已经大量回复nuget,并且您已经将您的程序集打包到nuget包中供内部使用,那么为什么要为此而在组合中添加额外的技术呢?在您的msi中打包nuget.exe,定期调用更新,完成。

我知道WiX支持创建补丁,但这似乎是事后诸葛亮。此外,如果修补程序安装失败,会发生什么情况?无序安装修补程序?主安装程序需要UAC权限,而修补程序不需要?

我认为时代在变,MSI代表了一种更古老的思考方式。巧克力就是一个很好的例子,但它仍处于混合阶段,混合了这两种技术。

MSI更像是拉——你得到一个包,然后安装它。Nuget更像是一个推送层——你得到一个包的名称,安装它,然后定期调用更新,下载并安装一个新版本。

罗韬
2023-03-14

特别:如何避免我的WiX/MSI部署解决方案中常见的设计缺陷?

  • MSI文件中常见问题的非常混乱和不理想的特别摘要。不太好。总比什么都没有好?书中没有的东西(太乱了)

重要话题:如何避免在MSI中意外分发敏感信息?

速度需求:WiX快速入门短版

WiX

MSI是公认的企业应用标准。与传统部署技术相比,它有一些主要的企业好处(和简短、简洁的版本)。WiX是创建MSI文件的新的开源方式。

  • Wix工具集下载(1)Main Wix setup,2)voive-Visual Studio集成设置
  • 该工具名为heat.exe.WiX的商业分支FireGiant有一个名为HeatWave的工具,具有更多功能。
  • 我基本上没有测试过的工具是WixHeatATL收获器扩展:https://github.com/nirbar/WixHeatATLHarvesterExtension(一个从x64模块获取注册表信息的WiX热扩展)

其他工具:

  • 然后,您可能希望通过阅读以下内容来检查交付安装程序的其他方式,除了Wix之外:
    • 使用什么安装产品?InstallShield、WiX、Wise、Advanced Installer等
    • 又一个工具快速列表

    你好世界

    • 最后,查看Codeproject上Wix源文件及其组件的完整示例。这是Wix的“你好世界”
    • “Hello WiX-Visual Studio中的逐步”。
      • 这需要WiX和Voctive(WiX工具集Visual Studio扩展
      • 如何将C#自定义操作添加到现有WiX项目

      视频示例:

      • 如何创建Windows Installer MSI-。净核心WiX
      • 使用WiX工具集为C#创建MSI/安装程序包

      更多示例代码:

      WiX快速入门:以下是我找到的一些最好的示例代码链接:

      • Helge Klein的真实世界WiX示例-请查看此示例(Wayback-存档版本)
      • Rainer Stropek在Github上的WiX示例非常有用
      • Alex Schevchuk从MSI到WiX-老化内容,但非常出色
      • Chris Painter的IsWiX教程-优秀的WiX示例

      最后:

      • Phil Wilson的Github MSI样本存储库:https://github.com/Apress/def-guide-to-win-installer.最好的内容,但老化。一般MSI样本,而非WiX样本
      • 我的实验地点:installdude。com
      • How-to-create-a-Windows-Service-MSI-Installer-Using-WiX
      • WiX扩展:https://github.com/nirbar/PanelSwWixExtension(Dism.exe、等…

      调试:始终检查所有事件日志、应用程序日志和MSI日志(如果可用)。我只是想提一下。并使用任何可用的调试工具,在执行任何其他操作之前,搜索准确的错误消息。

      并检查是否有任何明显缺失的运行时。例如:<代码>。Net。Net Core、Java、Silverlight、Direct X、VC Runtime、MS-XML(遗留)、等等

      自定义动作调试:

      • 自定义操作运行时失败的常见原因

      MSI日志记录:

      • 概述和总结(如何记录、解释日志文件等...)
      • 安装站点:MSI日志“how-to”
      • 更多MSI日志信息

      事件查看器:

      • 按住Windows键,轻触R,键入eventvwr。msc,然后按Enter键
      • 转到Windows日志=

      一般调试:

      >

    • "调试灯"

      应用程序启动问题:调试思路(鱼雷完全展开)

      ProcMon。exe:行业工具。“一刀切”工具。蜜蜂的膝盖,最高的,量子跳跃,猫的睡衣。有效地使用它可能是一个挑战,但它是最好的通用调试工具,而且是免费的(为了安全起见的注释链接)。

      • 快速、基本的样品

      调试工具:

      • 调试依赖关系问题的工具-ProcMon。exe、VS、依赖项遍历器、等等
      • 事件查看器、任务管理器、服务。理学硕士
      • Process Explorer、NET命令、SC.exe
      • Windows服务常见问题解答(FAQ)

      错误代码:查找错误代码和异常消息。

      • “幻数数据库”-在线查找
      • 检查错误代码-几种工具和方法

      部署助记符:思考部署问题的通用助记符:什么是锁定(使用中,恶意软件),什么是阻止(权限、防病毒、安全工具),什么是损坏的(磁盘、恶意软件、配置、加密)什么是意外的系统状态(磁盘空间、时间

      注意:总是第一个(下面的第8步):谷歌精确错误消息

      无法启动调试:1)重新启动,2)禁用防病毒,3)以管理员身份启动并检查,4)检查依赖项和运行时(Java、VC Runtime、NET等)。然后,如果需要的话:如果您仍然无法使用虚拟日志,请尝试使用虚拟日志?(许多虚拟机缺乏必要的运行时-检查)或辅助计算机8) 并检查用户评论, 9) 是否为相关应用程序运行更新 (新安装程序可以消除错误情况)<代码>10)还要对恶意软件进行全面检查吗?这些天到处都是<代码>11) 某些软件(通常是服务器软件)可能需要清理配置设置(配置错误)。桌面应用程序可能需要许可证才能启动。

      锁?:有了权限和锁,您可以尝试以提升的权限运行该工具?您可能有磁盘损坏-磁盘错误错误的ACL权限?(可能)。您的防病毒套件已锁定MSI试图放回原位的一些文件。您可以尝试暂时禁用它以查看。请注意,该文件也可以被隔离(移动到其他地方)。

      • 部署问题的通用检查列表(以下列表的备选方案-推荐)

      对于无法正确安装的设置。下面的一些通用技巧-除了检查事件日志安装-应用程序日志谷歌搜索任何错误消息(始终这样做-也许首先-但也许只是先重新启动-在面对所有复杂性之前):

      • 重新启动:在安装失败后首先重新启动,看看这是否解决了锁定和挂起的重命名问题
      • 其他计算机:请尝试在另一台物理计算机上安装?
        • 安装介质的重要烟雾测试
        • 经常过时,请检查运行时,检查Windows Update
        • 常见:vcredit,。NET。NET核心、Java、Direct X、等等
        • “Murphy Field”:“除了英文版之外,我们还设法在国际化设置中添加了其他bug”。哦,人类说!糟糕透了
        • 损坏的安装文件:损坏的安装文件。是否重新下载以确保?在浪费一整天之前,把这件事作为第一步来完成?平台咬合度是否正确?正确的CPU架构

        一些链接:

        • 尝试创建“uc.micro”文件夹时,windows中的安装过程失败,访问被拒绝
        • SQL Server 2017安装受阻
        • Visual Studio安装程序在AspNetDiagnosticPack上失败。msi(微星)
        • 安装程序在安装此包时遇到意外错误-。错误代码2896

        轻松访问:

        • XML文件:安装XML文件
        • 误报
        • 安装程序类方法-更多安装程序类方法
        • 这种安装COM的方法有效吗
        • Windows Installer最佳实践
        • 重新启动管理器并记录日志
        • 是否更改wix中的组件GUID
        • 简化WiX标记-您可以从WiX xml文件中省去许多源属性
        • 运行旧式应用程序(virtuals、兼容模式、重新打包、等)
        • ICE规则是什么
        • 预处理器与本地化变量,以及包含文件的问题
        • WiX预处理器

        重新打包、应用程序启动调试:

        • <代码>程序。exe、捕获、重新打包、服务安装和安装程序方法

        升级:

        • 主要升级失败的原因

        其他一些WiX链接:

        • WiX 3依赖于。净值3.5
        • 简化WiX标记
        • 向WiX注册COM EX
        • 无法卸载,它失败
        • 动态链接库
        • Microsoft调试环境
        • 如何为Windows Installer创建必备软件包
        • 如何嵌入CustomAction。CA.dll是否在MSI中
        • 每次从windows server 2012 R2重新启动服务器时,都会自动删除已安装的程序

        程序:

        • 打开Temp文件夹:Windows Key=

        学习Wix的一些好的起始链接:

        • 我的Wix快速入门建议

        Setup.exeWiX Bundle或MSI文件本身中提取文件:

        • 从EXE中提取MSI-包括如何提取嵌入在WiX Burn捆绑包可执行文件中的文件。
        • 如何比较两个(或多个)MSI文件的内容?-包括如何使用WiX的dark.exe工具
        • 从MSI中提取文件

        正如我在上面建议的“Wix快速入门”帖子中所写的那样:Wix是动手的。只需关注简单但完整的真实世界示例,如Codeproject中的示例—单独阅读文档可能只会让人感到困惑。

        专注于将您的应用程序拆分为组件并设置重大升级。使用每个组件一个文件作为经验法则,并阅读此答案以更好地理解组件创建:在wix中更改我的组件GUID?

        主要升级是已部署软件最常用的升级机制(另一种常见的升级类型是次要升级)。显然,您可以升级已经部署的内容是至关重要的。在部署第一个软件版本之前,让升级方案正常工作,以便对部署解决方案有信心。

        一旦您设置了组件,并且升级解决方案开始工作,其余的部分就会在您完成应用程序的部署需求并在Wix教程网站上查看示例时就位:https://www.firegiant.com/wix/tutorial/.

        对于那些直接编写Wix代码(没有GUI编辑器)的人,我建议您检查这个答案以找到一种保持源文件简洁的方法:WIX中guid的语法?

        进一步阅读:

        • Windows Installer和WiX的创建

 类似资料:
  • 据我所知,这些方法需要大致相同的读写次数。 一个想法是在中有一个名为posts的字段,这是我想为用户提取的文档数组。这将允许我直接从中提取数据,并获得数据的最新版本。 另一种方法似乎更Firebasey,它将文档存储在users/{userId}/feeds中,这些feeds是帖子本身的副本。我可以使用与中的数据相同的。假设,如果我需要为任何审查更新数据,我可以使用组集合查询来获取所有称为提要的集

  • 问题内容: 当我尝试从虚拟环境中卸载时,我看到它也尝试卸载更多软件包: 我想卸载 只 和没有别的降级。 我知道这些软件包都 依赖 于熊猫甚至 特定版本 的panda,但这完全可能吗? 部分动机 我的理解是,使用来从GitHub安装软件包并不容易。至少它不像使用单线纸那样容易。 由于我想在中使用该版本,因此我的计划是卸载该版本,并使用从正式仓库GitHub上的master安装。 我怎样才能做到这一点

  • 问题内容: 寻找有关 fcntl 和 lockf 的 优点 和 缺点 的信息以进行文件锁定。例如,哪个更适合用于便携性?我目前正在编写linux守护程序,并想知道哪种守护程序更适合用于执行互斥。 __ __ 问题答案: lockf和fcntl有什么区别: 在许多系统上,库例程只是的包装。也就是说,提供了该功能的子集。 资源 但是,在某些系统上,并且锁是完全独立的。 资源 由于它取决于实现,因此请确

  • 使用、或侦听和更改的可见性,是否有一些规则或好/坏的经验? 其中一个比其他的更好或更安全吗?我特别想知道/隐藏的时间和方式。 请注意,以下代码包含不正确的Swing规则,例如使用,在本例中,允许我在Swing GUI中打印出正确顺序的

  • 我是数据开发岗位的,因为这个岗位hc多,而且后面进池子可以调剂(可以调剂到数开),所以就去面试啦~ 一面,中午一点(我估计是第一个,这个时间很难顶)。。。 面试官很严肃,很认真,但是因为都是一些基础问题,不会引导你回答,所以各位小伙伴基础要过关啦 1. 说一说面向对象 封装、继承、多态,后面稍微展开了一些 2. String、StringBuffer、StringBuilding的区别 3. 重载

  • 我目前正在尝试将Project Lombok helper包含到我的Gradle项目中,但是在我的Build.Gradle中按照他们的Gradle说明进行操作时,我得到了以下错误: 错误:(11,0)生成脚本错误,发现不支持的Gradle DSL方法:“provided()”! null 我当前的build.gradle文件: