我正在尝试安装一个包含大约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
文件传递选项。你能否首先告诉我这是否可能,其次是我在语法中可能犯的错误。
由于
答案 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
希望它有所帮助。