如何使用带有选项列表的msiexec安装程序静默安装MSI软件包

时间:2018-03-08 10:24:11

标签: windows-installer install msiexec

我正在尝试安装一个包含大约10个选项的MSI包。我希望在.txt file中创建这些选项,并在安装过程中通过命令行将这些选项传递给msiexec.exe,使用如下脚本:

   C:\Windows\System32\msiexec.exe /qn /i "C:\folder\Installer.msi" /L*V "C:\folder\Installerlog.txt" /t "C:\folder\Installer.switch.txt"

我的installer.switch.txt文件的结构类似于:

Option1=option1 ^
Option1=option2 ^
Option1=option3 ^

有了这个,我希望通过installer.switch.txt文件传递选项。你能否首先告诉我这是否可能,其次是我在语法中可能犯的错误。

由于

2 个答案:

答案 0 :(得分:1)

我从未见过与/t一起使用的开关msiexec.exe - 这是您自己的发明,用于指示“带开关的文本文件”吗?有一些内置方法可以设置不依赖于文本文件的安装参数和设置。

基本上你可以通过命令行设置MSI内部使用的public properties,或者你可以使用转换(我觉得更好)。转换是一个部分数据库文件 - 一个MSI片段 - 用于在安装时更改原始MSI,以便在MSI文件中自定义您喜欢的任何内容。

换句话说,我会使用转换来设置这些选项,然后通过msiexec.exe应用它,如前面部分所述: How to make better use of MSI files 。链接的答案很长,只需查看公共属性的各个部分,并使用每个选项前面的数字1和2进行转换。

技术说明:我会将您要用于自定义的任何属性添加到SecureCustomProperties列表,以确保它们可以传递到延迟模式服务器安装过程。< / p>

这是非常技术性的,但在边缘情况下可能很重要。它涉及使用提升权限(而非管理员权限)安装的用户的技术细节。只需将所有自定义属性添加到MSI属性表中的SecureCustomProperties列表集中。您的SecureCustomProperties列表将读取类似于:PROP1; PROP2; PROP3等...您在转换中设置它。

答案 1 :(得分:0)

它可能。

我通过.ini文件实现了这个目标。在静默安装中,我们可以获取ini文件路径并使用key读取值。

Ini文件是具有基本结构的简单文本文件。

我们在.ini文件中可以有n个选项。

msiexec.exe /i "C:\folder\Installer.msi" /L*V "C:\folder\Installerlog.txt"  /qb  ConfigDirectory=C:\folder\Installer.switch.ini

在cmd上运行以上命令进行安装。

下面的代码用于读取和设置.ini文件值。

 public string IniReadValue(string Key, string Section = null)
        {
            StringBuilder temp = new StringBuilder(255);
            int i = GetPrivateProfileString(Section, Key, "", temp,
                                            255, this.path);
            return temp.ToString();
    }

 var MyIni = new IniFileRead("ConfigDirectory");
        var importDir = MyIni.IniReadValue("Option1", "OptionDirectory");
        var exporttDir = MyIni.IniReadValue("Option2", "OptionDirectory");

<强> Installer.switch.ini

[OptionDirectory]
Option1=value1
Option2=value2

希望它有所帮助。