您可能知道,msiexec是一个命令行应用程序,可用于安装MSI文件。您可能知道,您可以在静默或不可见模式下运行它。
如果安装程序要求用户回答有关要安装的部件的具体问题,是否有一些方法可以在msiexec命令行中添加一系列选项来执行此操作?
我认为必须有某种方法来设置MSI文件的默认设置才能实现这一点。 MSI文件是如何制作的?它们是通过微软的工具开发的吗?他们可以打开和编辑吗?
将MSI的用户界面视为可选。这意味着不需要答案,因为开发人员具有合理的默认设置,因此事情不会中断。
我们以MSI格式向公司客户分发我们的软件,我还向他们提供有关Orca基础知识的文档(orca.msi与Windows Installer SDK一起分发)以及如何自定义我们在Property
表中列出的安装的某些字段。如序列号,注册详情和其他一些设置。
在回答有关msiexec命令行选项的原始问题时,只需运行MSIEXEC /?
在命令行上设置属性,就可以使用像
MSIEXEC /I test.msi SOMEPROPERTY="Some value" PROP2="something else"
MSI文件专门用于支持静默安装作为内置功能 - 您始终可以跳过GUI。但是,某些MSI文件存在设计缺陷,导致安装在静默模式下不完整 - 这是一个严重的设计错误。这里描述了这个问题:Uninstall from Control Panel is different from Remove from .msi。
在静默安装MSI时,您需要做的是从msiexec.exe命令行配置设置,或者将所谓的转换应用于原始MSI文件。这两个选项在下面的单独部分中描述。
如果MSI文件设计良好,您将能够从msiexec.exe命令行或使用转换文件来修改原始MSI,从而设置PUBLIC PROPERTIES(它们始终为大写)。这些操作如下所述。公共属性最容易在MSI文件的“Property table”中找到。 Use the MSI tool of your choice to open the *.msi file并导航到Property表。还有一些免费的MSI工具可用于生成变换和查看(和编辑)MSI文件:How can I compare the content of two (or more) MSI files?(链接到底部)。
精心设计的MSI设置可通过这些公共属性完全配置。设计糟糕的MSI文件不是。设计糟糕的MSI文件最好使用转换文件进行调整(这可以对整个MSI文件进行实质性更改,以便在安装时应用)。设置公共属性只能更改公共属性可配置的任何内容 - 由安装程序创建者设计。转换几乎可以改变整个MSI文件中的任何内容。
通常,所有公司的静默部署都是使用转换来“将MSI文件打成形状”来实现企业标准。它是企业部署的一种非常有效的工具,并得到广泛使用。
一些安全保护链接:
MSI通常是违反直觉的,并且在引擎盖下有些复杂。但是,过度简化MSI文件包含一个或多个“功能” - 这些功能共同构成了“应用程序的位”。反过来,功能包括“组件” - 这是整个软件安装的原子单元 - 但这是一个非常技术性的细节 - 这个答案是关于用户暴露的MSI位 - 功能。
您通常可以通过交互式运行安装程序找到这些功能的列表,然后导航到自定义安装对话框(并不总是存在)。此处显示的功能是应用程序的“用户可配置”部分,可以选择排除或包含(某些是必需的)。您还可以通过使用上面提到的功能强大的工具打开MSI来找到这些功能(您还可以在下面的第2部分中看到链接)。
典型的功能包括:核心或程序,字典,示例,插件,拼写检查,SDK和开发人员工具(用于开发工具)等...某些功能是必需的(必须安装) - 上面的示例将是核心和程序,其他是可选的,应用程序不需要启动(如上面的开发工具功能)。可以使应用程序安装功能“按需” - 例如当用户启动拼写检查时拼写检查。
根据我的经验,大多数用户都希望安装整个应用程如果Windows Installer意外弹出并开始安装拼写检查程序组件,许多用户都非常恼火。坦率地说非常容易理解。但是,很少使用的模块化组件只对少数用户有用,可以制成可选组件 - 特别是如果系统管理员可能不希望网络上有该功能。对于开发人员工具来说肯定是这种情况 - 普通用户不应该使用这些工具。它们往往是人们需要在脚下射击的所有绳索。
如上所述,通常有两种自定义MSI安装的方法:(1)使用msiexec.exe自定义命令行,或使用(2)转换文件。
控制安装期间安装的功能的最简单和轻量级方法是使用msiexec.exe
命令行指定功能选择。有一整套属性用于功能配置。但是,在大多数情况下,指定ADDLOCAL
就足够了:
msiexec.exe /i myinstaller.msi ADDLOCAL="Program,Dictionaries" /qn
上面的命令行指定应在本地安装“程序”和“词典”功能(功能名称区分大小写!)。这通常就足够了,但您也可以使用REMOVE属性以类似的方式指定要删除的任何功能。一个特殊的开关是ADDLOCAL=ALL
,它将在本地磁盘上安装MSI中的所有功能(前提是MSI中没有额外的逻辑来覆盖它)。 ADDLOCAL property on MSDN。
公共属性定义的一个非常常见的事情是应用程序的许可证密钥。以下命令行指定安装“程序”和“词典”功能并应用序列密钥“1234-1234”:
msiexec.exe /i myinstaller.msi ADDLOCAL="Program,Dictionaries" SERIALKEY="1234-1234" /qn
如上面的描述所暗示的,每个设置的可自定义属性列表总是不同的。您可以找到MSI文件的Property表中列出的大多数属性,但也可以设置一些未在Property表中定义的属性。在大多数情况下,这涉及仅从设置GUI设置的属性(在大多数情况下表示设置设计错误)。应在正确创作的包中的属性表中定义所有属性。
在供应商的下载页面上查找文档,并询问他们是否支持与静默安装或大规模部署相关的任何文档。这样做很快,如果他们有标准答案模板,答案可以很快。控制其部署的公司将始终能够提供此服务。在我看来,理想的方法是一页PDF描述不同的部署设置。坦率地说,如果他们不能提供这个,给他们一些热量;-)。
MSI文件本质上是包含在COM结构化存储文件(文件中的文件系统)中的SQL数据库。转换文件是通过安装工具构建的“部分数据库”,例如Orca(SDK链接),Installshield or Wise, Advanced Installer, etc...(链接到不同工具的描述)。这些转换可以自定义或覆盖MSI中的几乎所有设置或数据库字段 - 包括安装“应用程序的某些部分”(功能)。创建转换后,在msiexec.exe命令行中将其应用程序指定给MSI:
msiexec.exe /i myinstaller.msi TRANSFORMS="mytransform.mst" /qn
然后,Windows Installer将在安装开始之前合并MSI和转换。这是希望完全控制MSI安装方式的大型组织所使用的方法。 TRANSFORMS property on MSDN。
如上所述,这是允许修改MSI中所有设置的选项。可以对设计错误的MSI文件应用大量修复,以实现可靠的部署。这是由“应用程序打包器”完成的。他们的工作是调整所有设置以在公司标准内工作。他们可能是最知识渊博的MSI专家之一 - 他们在MSI文件中看到很多奇怪的东西。
可以使用许多工具来创建转换,这里是在比较MSI文件的更多技术上下文中对此类工具的描述。只需直接跳到底部的免费工具列表:How can I compare the content of two (or more) MSI files?
Windows Installer有许多设计怪癖,对于开发人员来说可能特别烦人。不可否认,有些问题与反模式有关。
实现自定义操作(自定义安装逻辑)的高度复杂性的问题可能被认为是不可避免的,编写自定义操作的行为应该是强大的并且一旦需要就能够 - 并且因此复杂。如果技术本身提供通常用于部署的内容,则很少需要自定义操作。换句话说,您应该使用内置MSI功能,而不是自定义操作(如果可用),或WiX或第三方部署软件扩展(如果可用)。
WiX框架(开源)和商业工具(Installshield,Advanced Installer等)已经实现了扩展Windows Installer的功能,以处理缺少的功能,例如缺少XML文件的升级机制,共享创建和管理,创建用户和组,高级IIS配置,COM +安装,更改ACL权限,设置防火墙规则,持久安装属性等等......应该越来越少地需要实现自己的自定义操作。如果可以的话,总是使用已经被数千名其他用户测试过的功能(甚至数百万用户 - 这些扩展程序是由最好的部署专家编写的 - 你认为你可以自己做得更好吗?)。
它需要特定的思维方式来接近Windows Installer。但是,它提供了许多重要的企业利益,这些优势在以前的安装技术中几乎完全缺乏。推荐阅读The corporate benefits of using MSI files。特别是对于那些认为Windows Installer比它值得更麻烦的人。
简要总结一下链接的文章,MSI对以前的部署技术的核心企业好处(在我看来)是:
这只是为了挑选最重要的(经过多年的企业部署)。老实说,这些功能在世界上有所不同(对于企业部署),并且尽管存在各种缺陷,但真正使MSI很好用。
随着Windows Installer迎来暮年,我们只能希望未来的部署技术能够保留这些优秀的企业部署优势,并以一种让每个人,特别是开发人员受益的方式处理上述反模式。
部署是发展的关键部分。未能为潜在的最终用户成功安装好的软件可能是整个软件开发中最昂贵的错误。如果用户从未看到您的软件功能齐全,您怎么能成功?
必须更好地(减少)处理Windows Installer的复杂性,并且必须在接下来的任何范例中正确保留其关键优势。
一个相当不错的:summary of Windows Installer。
这一切都说明了;随着计算通常转向云平台,部署世界可能会以不可预测的方式发生巨大变化。然而,正如一句名言所说:事情变化越多,他们就越保持不变。部署需要处理将在未来几十年内在公司中使用的所有传统技术。以下是关于为什么部署似乎变得更复杂而且不那么复杂的部分 - 尽管所有的营销:What is the benefit and real purpose of program installation?。
看看未来几年的未来部署将会很有趣。也许我们会看到家用电脑的简化部署,企业部署将变得比以往更加复杂?将来,大多数部署可能是数据库部署任务,而不是文件和文件夹部署任务。截至目前,服务器部署可能非常复杂,包括数据库脚本,用户和组创建,共享设置和ACL权限,性能计数器,防火墙规则更新,AD查询和更新,COM +和消息队列配置,服务安装等... - 整整九码。
如何配置静默MSI设置
可以通过设置安装程序使用的属性在命令行上配置MSI安装。有预定义的Windows Installer属性,例如ALLUSERS属性。此属性定义是在当前用户或计算机的上下文中完成安装。
有关可用属性的信息可以是例如从可以使用msiexec的/ l选项创建的安装日志中获取
msiexec /I mysetup.msi /l*vx log.txt
如何创建MSI文件
有很多方法可以创建MSI文件。 MSI文件基本上是一个由各种表组成的数据库,其中包含所有必要的设置信息和安装对话框。
Microsoft提供了一个简单的工具调用Orca,它允许您编辑现有的MSI文件,并允许您找出可以设置哪些属性来配置安装。从理论上讲,也可以使用这个工具创建新的MSI文件,但这是一个非常麻烦的方法。
如果您正在寻找免费的开源解决方案,我建议您查看SourceForge或Nullsoft上提供的WiX toolset。所有设置信息都通过XML文件完成,然后将其转换为MSI安装程序。 WiX稳定(虽然仍标记为beta),可用于生产。实际上它将集成在即将推出的Visual Studio 2010版本中。
当然还有商业解决方案,InstallShield是市场领导者(也是价格领先者),Visual Studio可能是最广泛使用的工具。