在延迟的自定义操作中读取复选框值

时间:2018-05-16 09:49:22

标签: wix wix3

我正在开发一个安装程序,我必须为用户添加一个对话框以进行一些应用程序配置选择。该对话框在安装过程之前显示,配置选项只能在安装所需文件的安装后应用。所需文件是某种配置文件,必须根据所选配置进行调整。

序列如下:

  1. 启动安装程序
  2. 选择安装文件夹
  3. 选择所需的配置
  4. 安装应用程序
  5. 根据所选的所需配置更改配置
  6. 配置对话框将包含两个组件:一个复选框和一个下拉列表。目前,我正在努力使用复选框并在延迟的自定义操作中读取它的值。安装完成后执行此自定义操作。

    到目前为止,这是我的代码:

    <Dialog Id="TempDlgId" ...>
        <Control Id="MyCheckBoxId" Type="CheckBox" ... CheckBoxValue="0" Property="MyCheckBoxValue" Text="Sampe Text"/>
    </Dialog>
    

    这是用户选择配置的对话框。

    <Custom Action="MyCustomAction.SetProperties" After="InstallFiles">NOT Installed</Custom>
    <Custom Action="MyCustomAction" After="MyCustomAction.SetProperties">NOT Installed</Custom>
    

    我为自定义操作应用了排序。

    <CustomAction Id="MyCustomAction.SetProperties"
                  Return="check"
                  Execute="immediate"
                  Property="MyCustomAction"
                  Value="InstallLocation=[DEFAULTWORKINGDIRECTORY];MyCheckBoxValue=[MyCheckBoxValue]"/>
    <CustomAction Id="MyCustomAction"
                  Return="check"
                  Execute="deferred"
                  BinaryKey="MyCustomAction.CA.dll"
                  Impersonate="yes"
                  DllEntry="MyCustomAction"
                  HideTarget="no"/>
    

    以下是我对自定义操作的定义。

        [STAThread]
        [CustomAction]
        public static ActionResult MyCustomAction(Session session)
        {
            Debugger.Launch();
            var installLocation = session.CustomActionData["InstallLocation"];
            var hasModule = session.CustomActionData["MyCheckBoxValue"];
    
            return ActionResult.Success;
        }
    

    此代码必须更改已安装应用程序的配置,目前我正在努力获取复选框值。如果选中复选框并不重要,MyCheckBoxValue始终为空。是否可以在延迟操作中获取复选框的值?如果可能,我需要做什么才能获得复选框值?

1 个答案:

答案 0 :(得分:0)

由于我不熟悉安装程序,我不熟悉大写实际上具有使用WiX创建安装程序的功能这一事实。一旦我在大写字母中完整地写了MyCheckBoxValue,它就变成了一个公共属性,我设法在延迟的自定义操作中获得它的价值。