C# WiX引导程序WPF自定义用户界面:是否更改INSTALLFOLDER?

C# WiX引导程序WPF自定义用户界面:是否更改INSTALLFOLDER?,c#,wix,bootstrapper,C#,Wix,Bootstrapper,我有一个带WPF自定义UI的引导程序。它包含NETFramework4.5包和我的产品msi包。 我想在UI中提供文件夹选择对话框,然后将默认安装文件夹替换为用户选择的文件夹。 为此,我需要从msi读取值,显示对话框,然后替换 如何在WPF UI中实现它? 这样我就无法获得价值: if (engine.StringVariables.Contains("INSTALLFOLDER")) installdir2 = engine.StringVariabl

我有一个带WPF自定义UI的引导程序。它包含NETFramework4.5包和我的产品msi包。 我想在UI中提供文件夹选择对话框,然后将默认安装文件夹替换为用户选择的文件夹。 为此,我需要从msi读取值,显示对话框,然后替换

如何在WPF UI中实现它? 这样我就无法获得价值:

 if (engine.StringVariables.Contains("INSTALLFOLDER"))
                    installdir2 = engine.StringVariables["INSTALLFOLDER"];

可以这样做吗?

无法直接从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-引擎变量名

  • 在installer中,在安装时将INSTALLFOLDER属性存储在注册表中(或存储在适当的位置,在更新/修复/etc时可以轻松地从中获取)

  • 在引导程序中,设置InstallFolder属性的默认值

  • 在应用之前,请调用
    Engine.StringVariables[“InstallFolder”]=您的值
  • 你完了