如何将复选框值传递给 MSI 文件 WIX

问题描述

我已经创建了安装文件的 WPF,并有一个复选框供用户决定是否显示“桌面快捷方式”。但是我在将它发送到 MSI 文件时遇到了问题。

这是创建桌面快捷方式。但我想在这里添加一个条件。如果 WPF 复选框被选中“我想将它添加到桌面”,如果没有任何反应。

<Component Id="DesktopShortcutComponent" Guid="*">
        <RegistryValue Id="RegShortcutDesktop" Root="HKCU" Key="SOFTWARE\MyProject\1.0\settings" Name="DesktopSC" Value="1" Type="integer" KeyPath="yes" />
        <Shortcut Id="desktopSc" Target="[MYINSTALLFOLDER]\MyApplication.exe" Directory="DesktopFolder" Name="MyApplication" Icon="MyProductIcon" IconIndex="0" WorkingDirectory="MYINSTALLFOLDER" Advertise="no" />
        <RemoveFolder Id="RemoveShortcutFolder" On="uninstall" />
    </Component>

如何在自定义创建的 wpf 到 msi 文件之间传递值

我必须使用“引导程序的字符串值”吗?

BootstrapperApplication.Engine.Plan["checkBoxValues"] 

解决方法

您可以像这样设置字符串或数字变量

BootstrapperApplication.Engine.StringVariables["InstallDir"] = "somePath";
BootstrapperApplication.Engine.StringVariables["Cbx"] = "True";
BootstrapperApplication.Engine.NumericVariables["Variable"] = 1;

在 Bundle.wxs 中

<Variable Name="InstallDir"
              bal:Overridable="yes" />
<Variable Name="Cbx"
              bal:Overridable="yes"/>


<MsiPackage SourceFile="$(var.Some.Setup.TargetDir)Some.Setup.msi"
                  Id="InstallationPackageId"
                  Visible="no">
    <MsiProperty Name="INSTALLFOLDER" Value="[InstallDir]" />
    <MsiProperty Name="CBX" Value="[Cbx]" />
</MsiPackage>

产品.wxs

<Property Id="CBX" Value="False" Secure="yes" />

<Component Id="Shortcut"
           Directory="INSTALLFOLDER"
           Guid="68D52920-E643-42F9-B1C6-8D9D1D8C8B2E">
   <RegistryValue Id="RegShortcutDesktop"
                  Root="HKCU"
                  Key="SOFTWARE\MyProject\1.0\settings"
                  Name="DesktopSC"
                  Value="1"
                  Type="integer"
                  KeyPath="yes" />
   <Shortcut Id="desktopSc"
             Target="[INSTALLFOLDER]\Podit.exe"
             Directory="INSTALLFOLDER"
             Name="Podit"
             Icon="icon.ico"
             IconIndex="0"
             WorkingDirectory="INSTALLFOLDER"
             Advertise="no" />
   <Condition><![CDATA[CBX = "True"]]></Condition>
</Component>