【问题标题】:Install msi with msiexec in silent mod and specific directory在静默模式和特定目录中使用 msiexec 安装 msi
【发布时间】:2014-08-08 11:29:26
【问题描述】:

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

msiexec.exe /i c:\setup.msi TARGETDIR="c:\result" /qb

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

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

【问题讨论】:

标签: cmd windows-installer


【解决方案1】:

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

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

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

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

这里有更多的知识:

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

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

  3. 如果您真的是这个意思:因为在不同目录中安装了同一软件的多个“副本”,MSI 有点棘手。我为此推荐专业的 MSI 知识,因此您可能需要为此付费咨询。大多数人使用复制脚本而不是 MSI 来处理这些事情。但是,如果您想安装真正的多个安装版本,请搜索 MSDN 条目“Installing Multiple Instances with Instance Transforms”作为第一个起点。

【讨论】:

    【解决方案2】:

    我使用powershell检查它是否已经安装,如果还没有安装它。

    x86 微星:

    ((Get-ItemProperty HKLM:\\Software\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\* | Where { $_.DisplayName -like \"*[APPLICATION_NAME]*\" }) -ne $null)
    

    X64 微星:

    ((Get-ItemProperty HKLM:\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\* | Where { $_.DisplayName -like \"*[APPLICATION_NAME]*\" }) -ne $null)
    

    如果需要,您可以获取结果并将其存储在变量中,例如 $ApplicationInstalled,然后根据结果调整您的安装。

    if (-not $ApplicationInstalled)
    {
        #MSI Install Commmand
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-10
      • 1970-01-01
      • 2022-11-24
      • 2023-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多