InstallShield [PUBLIC] 属性在静默安装时传递给 MSI?

问题描述 投票:0回答:1

我试图弄清楚为什么 InstallShield 安装可以在正常安装下将组件的文件安装到 PUBLIC 文件夹,但在静默安装时却不能(并使用 /qn 运行 MSI)。

正常安装下,例如只需手动运行 setup.exe,我相信 [PUBLIC] 属性正在解析为“用户公共文件夹”,例如C:\用户\。然后,这些文件将安装在此文件夹下。好。

但是当我使用 /s (静默模式)和 /v"/qn" (让 MSI 在没有用户界面的情况下运行)运行安装程序时,[PUBLIC] 属性会丢失,并且 MSI 将其默认为,我相信,C:\。这些文件现在位于“错误”的位置,应用程序将无法找到它们。不好。

我们希望让最终用户可以选择静默安装(因此使用 /s /v 命令行参数)或执行手动安装。但正如我所解释的,这会导致文件转到两个不同的文件夹之一。

这是预期的行为吗? 为什么 InstallShield 在使用 UI 运行时似乎将 [PUBLIC] 属性传递给 MSI,但在静默时会忽略它?

对此有合理的修复吗?也许安装到不同的文件夹,比如INSTALLDIR,可能会更好?

windows-installer installshield silent-installer
1个回答
0
投票

事实证明,MSI 根本没有 PUBLIC 环境变量的概念,这是 InstallShield 获取 [PUBLIC] 值的地方。

相反,您有几个选择:

  1. 将属性值直接传递到 MSI,例如"/qn PUBLIC=\"路径在此处\""
  2. 获取 InstallShield 通过自定义操作设置属性。有一个 SetProperty 自定义操作类型。创建自定义操作后,将其放入 InstallExecuteSequence 中以便执行。

第二个选项更可取,因为在InstallShield中您可以引用环境变量设置,因此如果它发生变化,InstallShield可以在运行时跟踪更改。引用环境变量有一个不寻常的语法,例如在我的例子中它是[%PUBLIC]。请注意单个 % 符号(不是两个)和方括号。

© www.soinside.com 2019 - 2024. All rights reserved.