如何预先设置属性中未定义的 MSI SecureCustomProperties 以允许静默安装?

How to pre-set MSI SecureCustomProperties that are not defined in Properties to allow silent installation?

特定供应商的 MSI 通常是通过 EXE 包装器安装的,但我正在尝试通过 GPO 使用静默安装进行部署。我正在努力预设 SecureCustomProperties。

供应商记录了可以传递给 EXE 包装器的大写命令行选项,我假设它会将它们传递给 MSI。使用 Orca,我可以看到 MSI 的 属性 table 包含 SecureCustomProperties。此键的值是以分号分隔的所有记录参数的大写列表。

但是,每个单独的参数在属性中没有对应的键。 如何预先设置这些?

根据How to make better use of MSI files

You can find most properties listed in the MSI file's Property table, but it is also possible that some properties can be set that are not defined in the Property table. In most cases this relates to properties being set only from the setup GUI (indicates a setup design error in most cases). All properties should be defined in the property table in a properly authored package.

我可以只将每个参数添加为属性中的键并添加我的自定义值吗?如果是这样,我是否应该将参数保留在 SecureCustomProperties 中?

示例:

SecureCustomProperties: BLAH1;BLAH2;DBHEADER;BLAH4

DBHEADER 不是属性中的键。如何设置 DBHEADER 的值?

Short Version: This is a version you can try first.

  1. Run the this from a command prompt (kicks off administrative installation - maybe):

    setup.exe /a
    
  2. Extract to a location of your choice - if possible (more on extraction below).

  3. Grab the MSI and open it with Orca and generate a transform as described below - setting the SecureCustomProperties in the Property table

  4. Try to install silently using either the setup.exe or via msiexec.exe if you run the MSI on its own (pick one of the below command lines):

    setup.exe /s /v"TRANSFORMS=\"C:\Transforms.mst\""
    
    setup.exe /s /f1”c:\temp\my-answer-file.iss” /v"C:\Transforms.mst"
    
    msiexec.exe /I "C:\Your.msi" /QN /L*V "C:\msilog.log" TRANSFORMS="C:\My.mst"
    

在第 4 点中,命令行分别用于 Basic MSIInstallscript MSIvanilla, extracted MSI。对于 Installscript MSI,需要一个响应文件。它可能在提取物中找到,否则必须生成。见下文。


转换I would use a transform。转换可以在 MSI 中更改 "anything",因此它也可以轻松设置 SecureCustomProperties。本质上 属性 是一种安全措施(限制哪些属性可以从 GUI 序列传递到提升的安装过程),因此我猜他们不希望它可以通过命令行设置(我的假设).

Setup.exe vs MSI:您可以尝试部署 setup.exe 直接使用静默安装命令,或者您可以尝试从 setup.exe 中提取嵌入式 MSI 文件及其先决条件并单独部署它们。部署通常不需要先决条件——例如 .NET 框架。提取的 MSI 也更容易处理,因为它支持标准化命令行,让我展示一个快速示例:

msiexec.exe /I "C:\Your.msi" /QN /L*V "C:\msilog.log" TRANSFORMS="C:31.mst;C:\My.mst"

快速参数说明:

/I = run install sequence
/QN = run completely silently
/L*V "C:\msilog.log" = verbose logging
TRANSFORMS="C:31.mst;C:\My.mst" = Apply transforms 1031.mst and My.mst (see below).

文件提取:不幸的是,setup.exe 可能有很多东西,从 legacy installers,到 Installscript MSIBasic MSI(均来自 Installshield)以及其他供应商提供的各种其他可能性。它们甚至可以是 Installshield Suite projects - which feature a totally different command line again. These are installers that can install any number of EXE and MSI files in sequence. I wrote up a similar answer the other day on the topic of how to extract files AND / OR installing silently: Create MSI from extracted setup files - 请略读该答案。它侧重于提取文件,但也描述了使用 setup.exe.

的静默安装

在尝试其他任何事情之前,先试试这个:

 setup.exe /a

查看是否收到指定输出位置的提示。如果这样做,请提取文件。您将需要提取文件以获取 MSI 文件以创建转换。


建议:如前所述,您可以提取 setup.exe 或尝试静默 运行。我更喜欢提取,但让我建议一些可能的命令行,通过 setup.exe 进行静默安装。我不知道你的细节setup.exe,但让我做一些猜测:

基本微星:

setup.exe /s /v"TRANSFORMS=\"C:\Transforms.mst\""

安装脚本 MSI:

  • 步骤1:记录响应文件:

    setup.exe /r /f1”c:\temp\my-answer-file.iss”
    
  • 步骤 2:基本静默安装(使用响应文件)并应用转换:

    setup.exe /s /f1”c:\temp\my-answer-file.iss” /v"C:\Transforms.mst"
    

创建转换:您可以在 Orca 或任何其他 MSI 中创建转换部署工具。 . Main Tools(免费和商业)。在 Orca 你打开一个 MSI,然后去 Transforms => New Transform。然后您更改需要更改的内容 - 在您的情况下为 属性 table 和 SecureCustomProperties。准备就绪后:Transforms => Generate Transform... 现在保存转换。


Installshield Help File:

There are several relevant sections in the Installshield help file. Please study these if you need more tweaking of the installation parameters. All switches are documented here - these links are for the 2018 edition of Installshield:

通过反复试验,我发现使用 Orca 将丢失的键添加到 属性 table 是可行的。

示例:

SecureCustomProperties: BLAH1;BLAH2;DBHEADER;BLAH4

DBHEADER 在 属性 中不作为键(行)存在,因此我们无法设置它。

解决方案:

将具有我想要的值 (Live) 的键 DBHEADER 添加到 属性 table.

然后按照别处所述生成并使用生成的 MSI 转换。