在静默模式和特定目录中使用 msiexec 安装 msi

Nik*_*lay 3 windows-installer cmd

我有 setup.msi 文件。我需要以静默模式从命令行运行安装。还需要指定安装的路径。我尝试使用 TARGETDIR 和 INSTALLDIR 参数,但安装位于默认文件夹中:

msiexec.exe /i c:\setup.msi TARGETDIR="c:\result" /qb
Run Code Online (Sandbox Code Playgroud)

此外,如果再次运行此命令,安装将不会发生,因为 msiexec 认为该产品已经安装。在这种情况下,我需要获取指定目录中的产品安装并且注册表中的版本值已更新。

无论产品是否安装,如何将产品安装在特定目录中。

Phi*_*ilm 5

基本上你的命令行没有错。但是,哪个变量是正确的,很大程度上取决于 msi 包本身,TARGETDIR 起作用并不是一条规则。至少它适用于遵循最佳实践的 MSI 文件。通常 TARGETDIR 是正确的,对于 InstallShield 构建来说 INSTALLDIR 效果最好。

但如果有人直接将该文件夹创作为 ProgramFilesFolder,则此问题已解决。下载 Orca 或更好的 InstEd 或类似工具,您必须查看 MSI 文件内部。

您的第二个问题:“无论产品是否安装,如何将产品安装在特定目录中?”

这不是直接可能的。Windows Installer 有规则,并且这些规则不允许在不进一步努力的情况下在不同的目录中进行多次安装:此外,我不确定你为什么想要这个:

这是关于此的更多知识:

  1. 通常,每个想要安装在其他目录中的人都会首先卸载该产品。这是标准做法。使用命令行参数 /x 可以卸载它。然后使用新路径安装。

  2. 您是正确的,如果您使用(相同的)命令行第二次安装,则不会发生或更改任何内容。可以进行修复(纠正),而不是卸载。使用附加参数 REINSTALL=ALL REINSTALLMODE=vemus作为一个很好的默认值。但如上所述,无法以此更改安装路径。

  3. 如果您的意思确实如此:对于在不同目录中安装同一软件的多个“副本”,MSI 的情况有点棘手。我建议您拥有这方面的专业 MSI 知识,因此您可能需要为此付费咨询。大多数人使用复制脚本而不是 MSI 来完成此类操作。但是,当您想要安装真正的多个安装版本时,请搜索 MSDN 条目“通过实例转换安装多个实例”作为第一个起点。