我有一个带WPF自定义UI的Bootstrapper。它包含.NET Framework 4.5包和我的产品msi包。 我想在我的UI中提供文件夹选择对话框,然后用用户选择的默认安装文件夹替换。 为此,我需要从msi中读取值,显示对话框然后替换。
如何在WPF UI中执行此操作? 这样我就无法获得价值:
if (engine.StringVariables.Contains("INSTALLFOLDER"))
installdir2 = engine.StringVariables["INSTALLFOLDER"];
有可能吗?
答案 0 :(得分:1)
无法直接从msi读取安装文件夹(我的意思是相对容易),但您可以执行以下操作:
在Bundle.wxs中,将MsiProperty添加到包声明:
<MsiPackage Id="Installer" Compressed="yes" Vital="yes" ForcePerMachine="yes" SourceFile="..\Installer\bin\$(var.Configuration)\Installer.msi">
<MsiProperty Name='INSTALLFOLDER' Value='[InstallFolder]' />
其中INSTALLFOLDER - Wix安装程序中的变量,InstallFolder - 引擎变量名。
在安装程序中,在安装时将您的INSTALLFOLDER属性存储在注册表中(或者在更新/修复/等时可以轻松获取它)
在bootstrapper中,设置InstallFolder属性的默认值。
Engine.StringVariables["InstallFolder"]=your_value