Batch file 我可以从Windows批处理文件运行Windows Installer(msiexec)吗?

Batch file 我可以从Windows批处理文件运行Windows Installer(msiexec)吗?,batch-file,installation,windows-installer,installscript,installscript-msi,Batch File,Installation,Windows Installer,Installscript,Installscript Msi,好吧,我不在我的元素范围内,但不管怎样,还是这样 我需要对供应商提供的windows程序进行静默安装。供应商提供了用于安装的MSI文件。我创建了一个bat文件来运行msiexec,其中包含以下行: msiexec /i "C:\archibussilent\afm\ARCHIBUS 19.msi" /L*V C:\archibussilent\log\msi_SETUP.log 当我执行bat文件时,会弹出一个错误对话框,上面写着: “无法通过直接启动MSI包来运行此安装。必须运行setup.

好吧,我不在我的元素范围内,但不管怎样,还是这样

我需要对供应商提供的windows程序进行静默安装。供应商提供了用于安装的MSI文件。我创建了一个bat文件来运行msiexec,其中包含以下行:

msiexec /i "C:\archibussilent\afm\ARCHIBUS 19.msi" /L*V C:\archibussilent\log\msi_SETUP.log
当我执行bat文件时,会弹出一个错误对话框,上面写着:

“无法通过直接启动MSI包来运行此安装。必须运行setup.exe”

msiexe错误日志显示:

MSI (c) (80:B0) [15:48:02:588]: Note: 1: 1729 
MSI (c) (80:B0) [15:48:02:589]: Product: ARCHIBUS 19 -- Configuration failed.
MSI (c) (80:B0) [15:48:02:590]: Windows Installer reconfigured the product. Product Name: ARCHIBUS 19. Product Version: 19.3.30032.003. Product Language: 1033. Manufacturer: ARCHIBUS, Inc.. Reconfiguration success or error status: 1603.
错误是1603,这意味着权限问题,但我检查了访问权限,没有发现任何问题

如果不运行Setup.exe,我就不能运行msiexe,这是真的吗

非常感谢您的帮助。

通常情况下,“您必须运行setup.exe”是由供应商编写的要求,并不特定于MSI。他们可能有一个很好的理由,或者他们可能只是编写了它作为一个门检查,不必测试其他场景

您必须使用ORCA编辑MSI,并查看LaunchCondition和InstallExecuteSequence表,以了解它们是如何实现的。然后,您可以创建一个转换以绕过检查,或者在中可能传递一个属性,例如SETUPEXEDRIVEN=1,以模拟从setup.exe调用。(当您使用它创建setup.exe时,一个特别大且知名的安装程序开发产品会将其传递到MSI中。)

setup.exe可能有某种用途。例如,它可能是使用需要提升的清单编写的,也可能是下载和安装先决条件,或者可能是确保MSI缓存在给定位置,以便将来进行安装事务


另外,我假设您希望添加/QB或/QN以使安装保持静默。由于MSI在静默安装时不支持UAC提示,因此您还需要在调用之前提升cmd会话。

这很可能是使用创建的文件。这是一个非标准MSI文件,具有更高级的GUI和其他一些优点。在我看来,这是一种特别有问题的设置类型,因为一些严重的错误没有适当的解决方法。我一贯建议永远不要使用此项目类型。对于公司部署来说,这尤其成问题

这些设置具有许多功能。正如Chris所说,您可能可以通过转换运行它,并设置属性
SETUPEXEDRIVEN=1
,您可以尝试使用
setup.exe/a
运行管理员安装(更多信息:)。这将从MSI中提取所有cab文件(如果有),并将文件放在“网络安装位置””上,以便在公司网络中使用-基本上是一个较小的MSI,旁边有安装文件。我已经看到设置,然后将允许直接从微星运行-只是给一个镜头了

关于这些设置需要setup.exe启动的原因:

  • 在早期版本的Installshield中,必须在启动基于Installscript的MSI之前安装Installscript语言运行时。这似乎不再是事实,因为Installscript现在在没有运行时的情况下运行
  • setup.exe用于安装对Windows Installer引擎(msiexec.exe)的任何更新,为此需要一个setup.exe启动器。这种更新很少需要,今天应该通过Windows update完成
  • 许多传统功能,如能够通过setup.exe访问Internet(!)(对于公司使用非常不理想)、下载运行时和组件以及提取临时文件,也可以通过setup.exe完成
  • 还有其他一些特性,其中大多数对于公司部署是不可取的
下面是我在类似问题上的一篇文章,文章中有一个PDF的链接,其中包含实际的命令行示例