Wix工具集:如何在自定义操作中确定安装模式

时间:2018-04-05 17:27:19

标签: c# wix windows-installer custom-action

是否有机会在自定义操作中检查安装模式的类型。 我想为安装和卸载模式创建一个自定义操作,但是根据模式执行不同的逻辑。

类似的东西:

public static ActionResult CreateBackUpAction(Session session)
{
    //if (InstallType == "Install")
    //{
    //  BackUpFiles();
    //}
    //else if (InstallType == "Remove")
    //{
    //    DeleteBackUpFiles();
    //}

    return ActionResult.Success;
}

我知道理想情况下,对于这两种情况,我应该有两种不同的操作,但我希望尽量减少安装程序源中的行数。

1 个答案:

答案 0 :(得分:2)

您应该能够使用会话对象的Item来获取当前安装的属性值。会话的价值[" REMOVE"](它应该是" ALL")将告诉你它是一个卸载,以及会话的价值["已安装" 34;]如果它是全新的安装。

但是,是的,您应该使用这些类型的条件来调用单独的自定义操作,原因如下:

  1. 这意味着您不必担心延迟的自定义操作和属性,并且需要将延迟的自定义操作模型与CustomActionData一起使用,因为Windows会负责处理它。例如,如果延迟自定义操作,则使用会话[" REMOVE"]可能不起作用。本文档并未说明已安装或删除属性在延迟自定义操作中可用,因此您将使用session.CustomActionData与另一个自定义操作进行设置。
  2. https://msdn.microsoft.com/en-us/library/windows/desktop/aa370543(v=vs.85).aspx

    1. 对进程外方法的托管代码自定义操作调用并不便宜。当您可以使用Not Installed作为条件时,您将调用所有该机制并返回。如果您有可以更改的功能,或者修复发生,那么如果您没有呼叫条件,您将再次呼叫并再次返回(没有做任何事情)。

    2. 您没有很好的方法来处理回滚,因为(例如)如果卸载失败并回滚我假设您实际上更愿意保留您要删除的备份文件用你的代码。换句话说,在安装失败,卸载失败,回滚以及升级现有已安装产品时,您不清楚要对这些备份文件执行什么操作。

      < / LI>

      我还认为,与一个充满条件的大型代码相比,一些较小的专注自定义操作可以做一件事更容易处理。